• تهرانپارس ، خ شهید محمود آمینه بزرگراه رسالت، پلاک 213، طبقه2، واحد7

  • 021-77295097 0912-8099518

  • شنبه تا پنجشنبه۹ صبح تا ۶ بعد از ظهر

آموزش تزریق وابستگی (Dependency Injection)

آموزش تزریق وابستگی (Dependency Injection)

Dependency Inversion Principle

Dependency Inversion Principle یکی از اصول پنج گانه Solid است که برای اولین بار در سال 2000 توسط Robert Martin مطرح شد که تحت عنوان Uncle Bob یا «عمو باب» نیز شناخته می‌شود.

اصول solid

هدف از اصول SOLID توسعه کدهایی با خوانایی بالاتر و توسعه پذیرتر و همچنین ایجاد یک استاندارد بین تمامی توسعه دهندگان نرم افزاراست. وقتی این اصول به درستی در کنار یکدیگر به کار گرفته شوند، این امکان را به برنامه نویس می دهند تا به آسانی دست به توسعهٔ نرم افزار بزند و از مرتکب شدن به اشتباهات کوچک جلوگیری می کند.

درک این اصل نسبت به اصول دیگر SOLID کمی دشوارتر به نظر می رسد و برخی برنامه نویسان و توسعه دهندگان نرم افزار آن را با Dependency Injection اشتباه می گیرند. Dependency Injection یا تزریق وابستگی یک الگوی طراحی است که هدف اصلی آن حذف وابستگی های موجود بین دو کلاس با استفاده از یک Interface است. به عبارت دیگر تزریق وابستگی یک پترن طراحی نرم افزار است که ما را قادر به توسعه کد Loosely Coupled می کند.

در تزریق وابستگی ها ما دو اصطلاح داریم:

  • loosely coupled : بدین معنی است که کمترین وابستگی بین دو کلاس وجود داشته باشد.
  • tightly coupled: بدین معنی است که بیشترین وابستگی بین دو کلاس وجود داشته باشد.

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

یکی از راه های بسیار برای ایجاد کد قابل نگهداری از طریق اتصال سست (Loose coupling) است. Loose coupling باعث گسترش کد می شود و انعطاف پذیری آن را قابل نگهداری می سازد.

بنابراین ما باید برنامه و نرم افزار خود را طوری طراحی کنیم که تا حد ممکن استحکام ضعیف (loosely coupled) باشد. هنگامی که دو کلاس tightly coupled هستند (یعنی به همدیگر وابستگی زیادی دارند و در هم تنیده شده اند، این امر انعطاف پذیری نرم افزار را به شدت پایین می آورد.

اصل معکوس سازی وابستگی یک اصل طراحی نرم افزار است که به ما در تولید یک نرم افزار با استحکام ارتباطی کم (Loosely Coupled) کمک می کند. بر اساس این اصل :

  • ماژول های سطح بالا نباید به ماژول های سطح پایین وابسته باشند. بلکه هر دو باید به یک Interface وابسته شوند.
  • انتزاع (abstraction) نباید به جزئیات وابسته باشند. جزئیات باید به انتزاع وابسته باشند. (منظور از انتزاع دید کلی نسبت به یک شیء است مثلا وقتی ما می گوییم میز چیزی که در ذهن ما نقش می بندد یک شکل کلی است ولی وقتی می گوییم میز نهار خوری دقیقا مشخص می کنیم که چه نوع میزی است. در نتیجه انتزاع یک دید کلی از یک شیء به حساب می آید)
dependency injection

Inversion of Control یا IoC

همانطور که مطرح شد اصل معکوس سازی وابستگی ها به ما می گوید که وابستگی دو ماژول باید به چه نحوی باشد. برای پیاده سازی ایناصل ما باید از IoC یا وارونگی کنترل استفاده کنیم. IoC روشی کاملا کاربردی است که ماژول های سطح بالا را به جای وابسته کردن به ماژول های سطح پایین، به انتزاع ها (abstractions) متصل می کند.

Dependency Injection( تزریق وابستگی )

تزریق وابستگی به فرآیندی گفته می شود که طی آن کلاس های سطح پایین به کلاس های سطح بالا که شامل Interfaceها هستند تزریق می شوند. هدف اصلی تزریق وابستگی حذف وابستگی بین کلاس ها و جابه جایی کلاس های انتزاعی و سطح پایین به بیرون از کلاس سطح بالا است.

تزریق وابستگی از طریق روش های زیر صورت می گیرد:

  • تزریق سازنده (Constructor Injection)
  • تزریق متد (Method Injection)
  • تزریق ویژگی (Property Injection)