سلام میخوام بهتون مفهوم تزریق وابستگی رو با یه مثال کوتاه توضیح بدم بریم شروع کنیم
برای مثال درست کردن قهوه در خانه
بدون تزریق وابستگی (کلاس خودش وابستگی را ایجاد میکند)
تصور کنید شما یک دستگاه قهوهساز دارید، و این دستگاه خودش همه چیز را مدیریت میکند:
خودش دانههای قهوه را خریداری میکند.
خودش آب را از منبع میگیرد.
خودش آسیاب قهوه را تنظیم میکند.
در این حالت، دستگاه قهوهساز به شدت به نحوه تامین دانه قهوه، آب، و تنظیمات آسیاب وابسته است. اگر روزی بخواهید نوع دیگری از دانه قهوه یا منبع آب استفاده کنید، باید خود دستگاه را تغییر دهید. این یعنی وابستگی سختگیرانه.
با تزریق وابستگی (وابستگیها از بیرون تامین میشوند)
در این روش، شما دستگاه قهوهساز را میگیرید و مواد اولیه (آب، دانههای قهوه و تنظیمات آسیاب) را به آن میدهید:
دانه قهوه از یک فروشگاه خاص تامین میشود.
آب از یک منبع مشخص داده میشود.
تنظیمات آسیاب از بیرون مشخص میشود.
حالا اگر بخواهید دانه قهوه را تغییر دهید، فقط فروشگاه را عوض میکنید. اگر بخواهید نوع آب را عوض کنید، منبع آب را تغییر میدهید. دستگاه قهوهساز نیازی ندارد خودش بداند این منابع از کجا آمدهاند؛ فقط با آنها کار میکند.
تحلیل:
در حالت اول، دستگاه قهوهساز خودش تمام وابستگیها (دانه قهوه، آب و آسیاب) را ایجاد میکند. اگر چیزی تغییر کند، خود دستگاه نیاز به تغییر دارد.
در حالت دوم، دستگاه قهوهساز وابستگیها را از بیرون میگیرد. این یعنی دستگاه نیازی ندارد بداند منابع از کجا آمدهاند؛ فقط از آنها استفاده میکند.
معادل در برنامهنویسی:
بدون تزریق وابستگی: کلاس خودش وابستگیها را میسازد.
class CoffeeMaker { final CoffeeBean bean; final Water water; CoffeeMaker() { bean = CoffeeBean("Arabica"); water = Water("Mineral"); } }
//با تزریق وابستگی: وابستگیها از بیرون به کلاس داده میشوند.// class CoffeeMaker { final CoffeeBean bean; final Water water; CoffeeMaker(this.bean, this.water); } //و هنگام استفاده:// void main() { var bean = CoffeeBean("Arabica"); var water = Water("Mineral"); var coffeeMaker = CoffeeMaker(bean, water); } //تزریق وابستگی انعطاف بیشتری ایجاد میکند، زیرا تغییرات در منابع خارجی نیازی به تغییر در کلاس اصلی ندارد.//