آشنایی با dependency در شی گرایی
dependency ها مکمل های کلاس ما هستند. آن ها کلاس های خارجی می باشند که به کلاس فعلی تزریق می شوند و باعث افزایش عملکرد کلاس می شوند.
dependecy در شی گرایی چیست؟
فرض کنید در حال نوشتن یک کلاس هستید و نیاز به تعریف یک آبجکت مستقل دارید.
مثلا در حال پیاده سازی کلاس Car هستید و اکنون نیاز است آبجکت Tire را به صورت مستقل تعریف کنید و سپس در کلاس Car تزریق کنید.
به آبجکت Tire یک dependency کلاس Car گفته می شود.
پس dependency ها کلاس های خارجی هستند که در کلاس فعلی قرار گرفته و استفاده می شوند.
همچنین می دانیم که در طول پروژه، از پکیج های زیادی برای استفاده در پروژه بهره می بریم. همه پکیج هایی که به پروژه ما تزریق می شوند dependency های پروژه ما هستند.
class Car { public $color = 'red'; public $tire; public function tire_count_number() { return $this->tire::TireCount; } public function __construct() { $this->tire = new Tire(); } } class Tire { const TireCount = 4; } $object = new Car; echo $object->tire_count_number();
در مثال بالا مشاهده می کنید که ما از ثابت TireCount در کلاس Car استفاده کردیم و این در صورتی امکان پذیر بود که tire dependency به کلاس Car تزریق میشد.
می توانستیم کلاس Tire را بدین صورت به کلاس Car پاس دهیم و نیازی به ساخت آبجکت درون کلاس car نباشد:
$object = new Car(new Tire); echo $object->tire_count_number();
در اینصورت متد construct کلاس car اینگونه می شود:
public function __construct($tire) { $this->tire = $tire; }
dependency injection چیست؟
به عمل پاس دادن کلاس tire و استفاده از آن در کلاس car، عمل dependecy injection گفته می شود. یعنی تزریق وابستگی.
پس dependency injection یعنی افزودن کلاس خارجی به کلاس فعلی.
نوشتن dependency ها و تزریق به برنامه مزایای زیر را دارد:
- Modular: استفاده از dependency ها باعث می شود بتوانیم برنامه های modular بنویسیم. طوری که هر module به صورت مستقل نیز عملکرد داشته باشد. (self-sufficient)
- Testable: نوشتن تست برای برنامه آسان تر می شود. چون بخش های مستقلی داریم و عملکرد مشخصی برای هر بخش در نظر گرفته شده است.
- Maintainable: قطعا مدیریت کردن dependency ها از مدیریت برنامه هایی که کل کدها در یک جا هستند راحت تر است. خواندن کدها ساده تر است. آشنایی با عملکرد بخش ها سرعت می گیرد و در نتیجه توسعه برنامه لذت بخش تر خواهد بود.