دسته بندی : بک اند زبان برنامه نویسی PHP

تزریق وابستگی DI

تعریف DI

به صورت خلاصه ترزیق وابستگی و یا dependency injection ، الگویی است جهت تزریق وابستگی‌های خارجی یک کلاس به آن، بجای استفاده مستقیم از آن‌ها در درون کلاس. در زبان های برنامه نویسی شی گرا کلاس ها باعث پیاده سازی برنامه می شوند . قبل از ارائه DI اینگونه بود که هر کلاس وظیفه وابستگی به کلاس دیگر رو داشت پس اینگونه وابستگی شدیدی بین کلاس ها بوجود می امد که تست کردن و جداسازی بسیار سخت میشد و برای اضافه کردن یه فیچر به برنامه باید کل کلاس های وابسته را تغییر میدادیم . از این رو مفهوم Dependency Injection باعث راحت شدن کار شد اینگونه که ما کلاس را از وابستگی خارج میکنیم و به وسیله آبجکت وابستگی ها را ایجاد میکنیم . اینطوری داخل کلاسی که ما ساختیم با حداقل وابستگی اعمال میشه و تست کردن برای ما ساده تر میشه .

برای مثال :‌

تو دنیای واقعی ما یک کلاس داریم برای کارتهای بانکی  . خوب خیلی از بانک ها هستن که کارت بانکی ارائه میدن پس ما باید چطوری بدون اینکه کارت ها به هیچ بانکی وابستگی داشته باشه کلاس کارتی بسازیم که بتوانید کارت generate کند .


class Melat{
    public function prefix() : string {
        return "603769" ;
    }
    // all feature bank melat 
}

class Cart{
    public $bank ;

    public function __construct( $bank ){
        $this->bank = $bank ;
    }

    private function random() {
       // return random integer
    }
    
    public function make(){
        return $this->bank->prefix() . $this->random();
    }
}

$bank = new Melat() ;
$cart = new Cart( $bank ) ;

خب کلاس بالا یک تعریف ساده از استفاده DI است کلاس کارت را مشاهده نمایید . به هیچ کلاسی وابسته نیست ولی زمانی که ما یک ابجکت از کلاس کارت میسازیم بانک مورد نظر را به آن تزریق مینماییم. اگر بخواهیم یخورده پیچیده تر به قضیه نگاه کنیم ما میتوانیم یک اینترفیس برای بانک های خود هم بسازیم که کلاس های مثل ملت از قوانین ما تبعیت کنن .

interface Bank {
    public function prefix() : string ;
}

class Melat implements Bank{
    public function prefix() : string {
        return "603769" ;
    }
    // all feature bank melat 
}

class Cart{
    public $bank ;

    public function __construct( Bank $bank ){
        $this->bank = $bank ;
    }

    private function random() {
       // return random integer
    }
    
    public function make(){
        return $this->bank->prefix() . $this->random();
    }
}

$bank = new Melat() ;
$cart = new Cart( $bank ) ;

مشاهده آنچه اتفاق میوفته .

3| از1رای

مطالب مشابه


0 دیدگاهافزودن