+3 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)
برچسب گذاری دوباره قبل توسط
dependency injection چیست؟ آیا برای استفاده از این ویژگی باید حتما از framework استفاده کرد یا امکان پیاده سازی native آن وجود دارد؟

1 پاسخ

+3 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

dependency injection یک الگوی طراحی است که هدفش حذف بیان وابستگی های بین دو کلاس با استفاده از کد است به مثال زیر در جاوا توجه کنید، وقتی Class1 به Class2 وابستگی دارد ما این وابستگی را با تعریف یک فیلد از Class2 در Class1 تعریف می کنیم و سپس با استفاده از کلمه کلیدی new یک شئ از Class2 می سازیم:

public class Class1 {
    public Class2 class2 = new Class2();
    
}

حالا کل حرف الگوی طراحی dependency injection این است که استفاده از کلمه کلیدی new بیان وابستگی بین دو کلاس بصورت hard code است و می توان آن را بصورتی تغییر داد که این وابستگی توسط یک ابزار یا framework دست بالایی بصورت داینامیک در زمان کامپایل یا اجرا درون برنامه تزریق (inject) شود. برای مثال در جاوا با استفاده از framework های dependency injection مانند Spring می توان کد بالا را به صورت زیر تغییر داد:

public class Class1 {
    public Class2 class2;
    
}

و سپس باید با استفاده از تنظیمات XML (یا annotation) که Spring در اختیار شما قرار می دهد وابستگی بین این دو کلاس را تعریف کرد و در نهایت Spring در زمانی که شما مشخص کرده اید یک شئ از کلاس Class2 می سازد و درون متغییر class2 قرار می دهد.

اما در جواب قسمت دوم سوال شما باید بگم که در مورد زبان جاوا خیر لزومی ندارد حتما از framework های dependency injection استفاده کنید و می توانید خودتان با استفاده از reflection و annotation and xml processing این کار را انجام دهید ولی من اکیدا این کار را بدلیل هزینه و نیاز به دانش بالا توصیه نمی کنم.

قبل توسط (1.1هزار امتیاز)
برای مثال اگر از کلمه کلیدی new استفاده کنیم متغییر c به نوع Class1 وابسته می شود و اگر در آینده پیاده سازی جدیدی بنام Class11 داشته باشیم باید تمام جاهایی که Class1 را new کرده ایم را تغییر دهیم. این عیب بزرگ new کردن است.

سوالات مشابه

0 امتیاز
1 پاسخ 1.5هزار بازدید
+1 امتیاز
1 پاسخ 1.7هزار بازدید
+1 امتیاز
2 پاسخ 1.1هزار بازدید
0 امتیاز
1 پاسخ 419 بازدید
0 امتیاز
1 پاسخ 1.3هزار بازدید
...