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

مزایا و معایب هر کدام از روش های 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;

}

1 پاسخ

+1 امتیاز
قبل توسط (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 استفاده می شود.

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

سوالات مشابه

+1 امتیاز
1 پاسخ 886 بازدید
+1 امتیاز
2 پاسخ 1.0هزار بازدید
0 امتیاز
1 پاسخ 414 بازدید
0 امتیاز
1 پاسخ 1.3هزار بازدید
0 امتیاز
1 پاسخ 1.5هزار بازدید
+3 امتیاز
1 پاسخ 4.3هزار بازدید
...