Inversion Control

Dependency Injection ، در این مقاله میخواهیم راجب تزریق وابستگی در Inversion Control  صحبت کنیم. هدف اصلی تزریق وابستگی و Inversion Control حذف وابستگی از برنامه است.

این کار باعث میشود سیستم جداتر و قابل نگه داری تر باشد.اول بیاید سعی کنیم Inversion Control  را کامل درک کنیم.

اگر به روزهای برنامه نویسی قدیمی کامپیوتر برگردید، روند برنامه در کنترل خود اجرا میشد.

برای مثال بیایید روند یک برنامه چت ساده را که در زیر دیاگرام شده درنظر بگیریم.

Inversion Control

  1. کاربر نهایی پیام چت را میفرستد.
  2. برنامه منتظر پیام از طرف دیگر میشود.
  3. اگر هیچ پیامی یافت نشود به مرحله ۲ بازمیگردد یا به مرحله ۴ میرود.
  4. پیام را نشان میدهد.
  5. کاربر به کارش ادامه میدهد.

اگر شما روند برنامه را به درستی تجزیه و تحلیل کنید، میبینید که متوالی است.

برنامه در کنترل خودش است. وارونگی کنترل به این معنی است که برنامه کنترل را به شخص دیگری اعطا کند تا روند را ادامه دهد.

برای مثال اگر برنامه چت را بر اساس رویداد تعریف کینم روند برنامه چیزی شبیه زیر خواهد شد:

  1. کاربر نهایی پیا میفرستد.
  2. کاربر به کارش ادامه میدهد.
  3. برنامه به اتفاقات گوش کیدهد. اگر پیامی دریافت شود اتفاق فعال شده و پیام دریافت شده و نمایش داده میشود.

اگر روند برنامه را نگاه کنید متوالی نیست،بلکه بر اساس اتفاق است.

پس کنترل وارون شده است.پس به جای اینکه برنامه داخلی روند را کنترل کند، اتفاقات روند را کنترل میکنند.رویکرد روند اتفاق بسیار منعطف تر است.

دقت کنید استنتاج نکنید که وارونگی کنترل تنها با اتفاقات اجرا میشود.

شما میتوانید روند کنترل را با توابع اعطای کالبک، مشاهده الگو، اتفاقات، تزریق وابستگی و چندها راه دیگر اعطا کنید.

وارونگی کنترل یک اصطلاح منبع کلی است در حالی که تزریق وابستگی یک زیر مجموعه از وارونگی کنترل است.

وارونگی کنترل یک مفهوم است که در آن روند برنامه معکوس شده است.

پس برای مثال عوض اینکه با صداکننده یک متد را صدا بزنیم


SomeObject.Call();

بای کرویکرد براساس اتفاق جایگزینش میکنیم، مانند زیر


SomeObject.WhenEvent += Call();

در کد بالا صداکننده یک اتفاق را نمایش میده و وقتی اتفاق رخ دهد، صداکننده وارد عمل میشود.

بر اساس اصل هالیوود است”با ما تماس نگیرید، ما با شما تماس میگیریم”.

در هالیوود وقتی هنرپیشه ها امتحان میدادند داور ها میگفتند با ما تماس نگیرید ما با شما تماس خواهیم گرفت.

رویکرد بالا کد را بسیار منعطف تر میکند چون صداکننده از متدهای شئ خبر ندارد و شئ هم از روند برنامه صداکننده بیخبر است.

تزریق وابستگی شئ هایی را که یک شئ نیاز دارد تولید میکند.

پس به جای اینکه وابستگی ها خود را بسازند از خارج تزریق میشوند.

برای مثال فکر کنید ما کلاس Customer زیر را داریم که از یک کلاس Logger برای log  خطاها استفاده میکند. پس به جای ساخت logger از درون کلاس، میتوان همینکار را با سازنده مانند کد زیر انجام دهیم.

بزرگترین دستاورد رویکرد بالا جداسازی است.

حالا شما میتوانید شئ customer را فراخوانی کرده و از هر نوع شئ Logger رئ شوید، همانگونه که در زیر نمایان است.


Customer obj = new Customer(new EmailLogger());
Customer obj1 = new Customer(new EventViewerLogger());

خلاصه تفاوت ها

وارونگی کنترل: یک اضطلاح عمومی است و به چندین روش اجرا میشود(اتفاقات،اعطاو..)

تزریق وابستگی: تزریق وابستگی یک نوع وارونگی کنترل است و توسط تزریق سازنده ، تزریق گذارنده یا تزریق متد اجرا میشود.

 

پویا قربانی

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.