tgoop.com/ninja_learn_ir/376
Last Update:
ـ Dependency Injection چیه؟ 🤔
امروز میخوایم بررسی کنیم Dependency Injection یا همون تزریق وابستگی چیه
خب Dependency injection یه مفهومی توی برنامهنویسی شیگراست که به سادهترین شکل میشه گفت برای جداسازی وابستگیها بین کلاسها استفاده میشه. یعنی چی؟ یعنی به جای اینکه هر کلاس خودش مستقلاً وابستگیهای مورد نیازش رو بسازه، این وابستگیها از بیرون بهش تزریق میشه. این کار باعث میشه کد ما تمیزتر، انعطافپذیرتر و قابل تستتر بشه.
چرا مهمه؟ 🤨
فرض کن یه کلاس داری که برای کارکردش نیاز به یه سری سرویسهای دیگه داره. مثلاً کلاسی که مسئول لاگین کاربره، نیاز به سرویس دیتابیس داره. حالا اگه این سرویس رو خود کلاس بسازه، دیگه وابستگی محکمی بین این دو تا وجود داره. یعنی هر وقت بخوای دیتابیس رو عوض کنی، باید بری توی این کلاس دست ببری. اما اگه از Dependency Injection استفاده کنی، میتونی هر وقت خواستی به این کلاس هر دیتابیسی که دوست داری تزریق کنی، بدون اینکه نیاز باشه توی کدش تغییری بدی.
یه مثال ساده 🤓
فرض کن کلاس زیر رو داری که برای ارسال پیام نیاز به یه سرویس پیامرسان داره:
class NotificationService:
def __init__(self):
self.sender = EmailSender()
def send(self, message):
self.sender.send(message)
اینجا کلاس
NotificationService مستقیم وابسته به EmailSender هست، یعنی اگه بعداً بخوای از یه روش دیگه برای ارسال پیام (مثلاً SMSSender) استفاده کنی، باید بری کد این کلاس رو تغییر بدی. این باعث میشه کدات به هم گره بخورن و انعطافپذیری کم بشه.حالا با استفاده از Dependency Injection اینجوری مینویسیمش:
class NotificationService:
def __init__(self, sender):
self.sender = sender
def send(self, message):
self.sender.send(message)
تو این حالت،
sender (که میتونه EmailSender، SMSSender یا هر چیز دیگهای باشه) از بیرون به NotificationService تزریق میشه. حالا اگه بخوای نوع ارسال پیام رو تغییر بدی، فقط کافیه یه شیء جدید بهش تزریق کنی:email_sender = EmailSender()
sms_sender = SMSSender()
notification = NotificationService(email_sender) # استفاده از ایمیل
notification.send("Hello via Email!")
notification_sms = NotificationService(sms_sender) # استفاده از SMS
notification_sms.send("Hello via SMS!")
مزایای Dependency Injection 📈
1⃣ قابلیت تست بیشتر: چون وابستگیها از بیرون تزریق میشن، میتونی راحتتر mock کنی و تست بنویسی.
2⃣ انعطافپذیری بیشتر: راحت میتونی وابستگیهای مختلف رو جایگزین کنی بدون اینکه توی کلاس تغییر بدی.
3⃣ کاهش coupling: وابستگی بین کلاسها کمتر میشه و این باعث میشه کدات مستقلتر باشن.
جمعبندی 🎯
فهمیدیم که Dependency Injection بهت کمک میکنه که کدهای تمیزتری داشته باشی که راحتتر تست و اپدیت میشن. خیلی وقتا که بخوای یه اپلیکیشن بزرگ و مقیاسپذیر بنویسی، این الگو میتونه کارتو خیلی راحتتر کنه. پس دفعه بعد که داشتی کد میزدی و حس کردی یه کلاس داره زیادی به کلاسهای دیگه وابسته میشه، به فکر استفاده از این روش باش 😉
#programing #backend
BY Ninja Learn | نینجا لرن
Share with your friend now:
tgoop.com/ninja_learn_ir/376
