الگوی DI یا Dependency Injection یا تزریق وابستگی گرچه در ظاهر بسیار ساده می نماید, اما باید بدانیم کاربرد این الگو چیست و چرا از آن در فریم ورک های مختلفی از جمله زند فریم ورک ۲ استفاده زیادی شده است. استفاده از DI یک آینده نگری است. همه ما میدانیم که احتمال تغییرات در سورس همیشه وجود دارد. پس نحوه کد نویسی در بهترین حالت خود, با کمترین تغییرات در آینده بیشترین کارایی را فراهم می نماید. در حالت های کد نویسی آشفته و بی برنامه ممکن است کوچکترین تغییری نیازمند بررسی و تغییر چندین کلاس و چندین فایل و چندین ماژول باشد. اما با برنامه ریزی این تغییرات به حداقل خود خواهد رسید علاوه بر آن مدیریت تغییرات را برای شما آسوده تر خواهد کرد.

اما DI چیست؟ کلاس زیر را در نظر بگیرید:

دو کلاس فوق برای ارسال پیامک در نظر گرفته شده اند و ممکن است در آینده انواع کلاس های دیگر نیز افزوده شوند. مانند SendP2PSMS یا SendIrancellSMS و یا هر چیز دیگری. پس در متد سازنده هر کدام از این کلاس ها بایستی کلاس Gateway و Configs ایجاد شود. حال اگر بخواهید آرگومان جدیدی به کلاس Gateway اضافه کنید مجبورید در تمام کلاس های ایجاد شده دست برده و تغییر ایجاد نمایید. و حتما مدیریت تغییرات این چنینی بیشتر خواهد شد به خصوص اینکه تعداد استفاده کنندگان از Gateway بیشتر و بیشتر شود.

خوب راه کار استفاده از DI است. به جای اینکه هر کلاس مسول ایجاد Gateway باشد یک کلاس مشترک (مانند یک Factory) مسول مدیریت آن خواهد بود. مانند کد زیر :

در مثال بالا با استفاده از SMSFactory مدیریت بر روی Gateway را مجتمع کردیم و کلاس Gateway ایجاد شده را به کلاس های ارسال پیامک تزریق کردیم. حال هرچه قدر کلاس های دیگری به مجموعه افزوده شود برای تغییر در آرگومان های کلاس Gateway تنها به SMSFactory مراجعه خواهیم داشت. به این روش استفاده و تزریق وابستگی های یک کلاس Dependency Injection می گویند. در رابطه با مثال بالا عکس این مورد نیز می تواند صادق باشد به این معنی که :

– فرض کنیم در پروژه ای می خواهیم از ۴ نوع پایگاه داده استفاده نماییم. هر پایگاه داده کلاس مربوط به خود را دارد.

– حال کلاسی مینویسیم که قرار است اطلاعاتی را از پایگاه داده استخراج نماید. برای این کلاس بایستی متغیری از نوع یکی از کلاس های پایگاه داده تعریف شود.

– اگر بدون DI بخواهیم اینکار را انجام دهیم میتوانیم در متد سازنده کلاس متغیر پایگاه داده را ایجاد کرده و از آن استفاده نماییم.

– اما به روش DI برنامه به گونه ای نوشته می شود که کلاس نهایی درگیر ساخت یک متغیر از نوع پایگاه داده نشود تا مدیریت تغییرات آینده نیز آسانتر شود.

گرچه مثال های بالا کامل نیستند اما می تواند یک ایده کوچک باشد. استفاده از DI میتواند سرعت و راحتی فرآیند تست (Unit Test) را هم افزایش دهد. با این روش می توانید مدیریت بهتری بر روی کد های خود داشته باشید. علاوه بر روش فوق میتوان از Setter ها و  یا از اینترفیس interface برای تزریق وابستگی ها استفاده کرد.

در نهایت DI یعنی آماده کردن و ارسال نمونه صحیحی از متغیر ها به یک کلاس.

SimpleDependencyInjection

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*


چهار + = 10