تزریق نیازمندی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

تزریقِ وابستگی (به انگلیسی: 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 نشده اند.

پیوندهای بیرونی[ویرایش]