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

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

تزریق وابستگی یا Dependency Injection یک الگوی طراحی است که با استفاده از آن میتوانیم Inversion of Control را پیاده سازی کنیم. به عبارت دیگر می توانیم وظیفه ساختن یک شی از Dependency را در بیرون از کلاسی که به آن Dependency نیاز دارد منتقل کنیم. کلاسی که Dependency را می‌سازد می‌تواند به روش های مختلف شی ساخته شده در اختیار کلاس وابسته قرار دهد. در قالب یک جمله با استفاده از Dependency Injection ما وظیفه ساختن اشیایی که به آنها وابستگی داریم را بیرون از کلاس وابسته انجام می دهیم.

در الگوی طراحی Dependency Injection به طور کلی سه نوع کلاس وجود دارند:

  • کلاس Client: این کلاس در واقع کلاسی وابسته است. یا به عبارتی کلاسی است که برای انجام وظیفه ی خود به یک کلاس دیگر تحت عنوان Service نیازمند است.
  • کلاس Service: کلاس Service کلاسی است که کلاس Client’t برای انجام کار خود به آن نیازمند است. این کلاس Dependency ما است.
  • کلاس Injector: این کلاس وظیفه تزریق کردن یک شی مناسب از کلاس Service را به درون کلاس Client را دارد.

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


همانطور که در تصویر بالا مشاهده می کنید کلاس Injector یک شی از کلاس Service را ساخته و آن را به درون کلاس Client تزریق می‌کنند. با استفاده از این الگوی طراحی وظیفه ساختن یک شی جدید از کلاس Service در درون کلاس Client انجام نمی شود و این وظیفه به کلاس Injector داده می شود.


پرووید: مرکز آموزش تخصصی برنامه نویسی و توسعه نرم افزار