در مفاهیم Dependency Injection، تفاوت Field injection و Constructor Injection چیست؟

+1 رأی
میانگین بازدید روزانه 0.77577 بازدید

مزایا و معایب هر کدام از روش های Constructor Injection و Field injection در زمان استفاده از Dependency Injection چیست؟

Constructor Injection:

public class Checkout {

   private ShoppingCart cart;

   @Inject
   public Checkout(ShoppingCart cart) {
      this.cart = cart;
   }

}

Field injection:

public class Checkout {

   @Inject
   private ShoppingCart cart;

}
سوال 2 سال قبل در تالار کامپیوتر و اینترنت توسط Saeed Zarinfam (346 امتیاز)

1 جواب

+1 رأی

همانطور که مشخص است کد نوشته شده در روش Field injection کوتاه تر از روش Constructor Injection است و به پارامتر Constructor و ... نیازی نیست اما مشکل آن این است که Dependency کلاس مخفی است و از بیرون کلاس مشخص نیست کلاس Checkout به کلاس ShoppingCart وابستگی دارد. مشکل دیگر روش Field injection در زمان تست است، ما حتی برای نوشتن یک تست ساده هم برای satisfy کردن Dependency کلاس Checkout باید از reflection یا یک DI framework استفاده کنیم.

درست است برای روش Constructor Injection باید کد بیشتری نوشته شود ولی چون Dependency های کلاس در سطح Constructor بیان می شود مشکلات Field injection را ندارند و فقط با نگاه کردن به Constructor کلاس، وابستگی های کلاس مشخص می شود. عیب روش Constructor Injection این است که satisfy کردن تمام Dependency ها اجباری است و Dependency اختیاری با آن قابل پیاده سازی نیست. برای Dependency های اختیاری نیز روش Setter Injection پیشنهاد می شود. در روش Setter Injection از متد های setter یک فیلد برای Injection کردن Dependency استفاده می شود.

جواب 2 سال قبل توسط Saeed Zarinfam (346 امتیاز)
ممنون از توضیحات کاملتون.
اگر فیلدها رو به جای private به شکل package access تعریف کنیم در تستهای هم package نیازی به استفاده از reflection نیست.

سوال های مشابه

0 رأی
0 جواب میانگین بازدید روزانه 0.1193 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.29373 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.45180 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0657 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.27278 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.4508 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.25316 بازدید
+3 رأی
1 جواب میانگین بازدید روزانه 0.19281 بازدید
+3 رأی
1 جواب میانگین بازدید روزانه 1.492,256 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.1668 بازدید
کانال تلگرام جواب یاب
...