تزریقِ وابستگی (به انگلیسی: Dependency Injection (DI)) در برنامه‌نویسی شیءگرا، الگوی طراحیست با قاعدهٔ اصلیِ جداکردنِ رفتار از تحلیلِ نیازمندی (به انگلیسی: Dependency Resolution): فنی برای تجزیه‌کردنِ مؤلفه‌هایِ بسیار مستقلِ نرم‌افزاری (به انگلیسی: Software Components). به صورت خلاصه تزریق وابستگی، الگویی است جهت تزریق وابستگی‌های خارجی یک کلاس به آن، به جای استفاده مستقیم از آن‌وابستگی‌ها در درون کلاس.

معماری تزریق وابستگی

مثال ویرایش

کلاس زیر را در نظر بگیرید

class SendSingleSMS
{
    private $gateway;
 
    public function __construct()
    {
        $configs = new Configs('gateway_attributes');
        $this->gateway = new Gateway($configs);
    }
 
    public function send()
    {
        $this->gateway->sendSingle();
    }
}

اگر بخواهید آرگومان جدیدی به کلاس Gateway اضافه کنید مجبورید در تمام کلاس‌های ایجاد شده (SendSingleSMS,SendMultiSMS,SendIrancellSMS,...) دست برده و تغییر ایجاد نمایید. و حتماً تغییرات بیشتر خواهد شد به خصوص اینکه تعداد استفاده کنندگان از Gateway بیشتر شود. با استفاده از تزریق وابستگی کلاس فوق را میتوان مشابه زیر نوشت :‌

class SendSingleSMS
{
    private $gateway;
 
    public function __construct(Gateway $gateway)
    {  
        $this->gateway = $gateway;
    }
 
    public function send()
    {
        $this->gateway->sendSingle();
    }
}

همانطور که مشاهده می کنید برای استفاده از کلاس فوق متغیری به نام gateway بایستی به سازنده کلاس تزریق شود. این کار باعث می‌شود که کلاس فوق بدون درگیر شدن با وابستگی‌های Gateway, از آن استفاده کند. و مشخصا هرچقدر هم تعداد استفاده کنندگان از Gateway به روش تزریق وابستگی بیشتر شود, در رابطه با تغییرات احتمالی سازنده کلاس Gateway نگرانی وجود نخواهد داشت. چرا که کلاس‌های استفاده‌کننده مانند SendSingleSMS درگیر ایجاد کلاس Gateway نشده‌اند.

منابع ویرایش