Bağımlılık enjeksiyon çerçevelerinin dışında, bağımlılık enjeksiyonu (yapıcı enjeksiyon veya ayarlayıcı enjeksiyon yoluyla) neredeyse sıfır toplamlı bir oyundur: nesne A ile bağımlılık B arasındaki bağlantıyı azaltırsınız, ancak şimdi A örneğine ihtiyaç duyan herhangi bir nesne ayrıca nesne B'yi de oluşturur.
A ve B arasındaki kuplajı hafifçe azalttınız, ancak A'nın kapsüllemesini azalttınız ve A'nın bir bağımlılığını da birleştirerek A'nın bir örneğini oluşturması gereken A ve herhangi bir sınıf arasındaki kuplajı arttırdınız.
Dolayısıyla bağımlılık enjeksiyonu (çerçeve olmadan) faydalı olduğu kadar eşit derecede zararlıdır.
Ancak, ekstra maliyet genellikle kolayca haklı çıkarılabilir: müşteri kodu bağımlılığın nesnenin kendisinden daha fazla nasıl kurulacağı hakkında daha fazla şey biliyorsa, bağımlılık enjeksiyonu gerçekten eşleşmeyi azaltır; Örneğin, bir Tarayıcı girdiyi ayrıştırmak için bir girdi akışının nasıl elde edileceği veya oluşturulacağı ya da müşteri kodunun girdiden ayrıştırmak istediği şey hakkında pek bir şey bilmediğinden, bir giriş akışının yapıcı enjeksiyonu açık bir çözümdür.
Test, sahte bağımlılıkları kullanabilmek için başka bir gerekçedir. Bu, yalnızca bağımlılıkların enjekte edilmesini sağlayan testler için kullanılan fazladan bir yapıcı eklemek anlamına gelir: yapıcılarınızı her zaman enjekte edilecek bağımlılıklara gerek duyacak şekilde değiştirirseniz, aniden, bağımlılıklarınızı 'bağımlılıkları' bağımlılıklar hakkında bilmek zorundasınız. doğrudan bağımlılıklar ve hiçbir iş yapamazsınız.
Yardımcı olabilir, ancak kesinlikle her bağımlılık için kendinize sormalısınız, testin maliyeti faydalı mı ve test sırasında gerçekten bu bağımlılıkla alay etmek isteyeceğim mi?
Bir bağımlılık enjeksiyon çerçevesi eklendiğinde ve bağımlılıkların yapımı müşteri koduna değil, çerçeveye bırakıldığında, maliyet / fayda analizi büyük ölçüde değişir.
Bağımlılık enjeksiyon çerçevesindeki değişimler biraz farklıdır; Bir bağımlılığı enjekte ederek kaybettiğiniz şey, hangi uygulamaya dayandığınızı kolayca bilme ve hangi otomatik bağımlılık işlemlerine güveneceğinize karar verme sorumluluğunu değiştirmektir (örneğin bir @ Enjekte edilmiş Foo'ya ihtiyacımız varsa). @ Foo'yu ve enjekte edilen bağımlılıkları mevcut olan) veya her bir kaynak için hangi sağlayıcıların kullanılması gerektiğini belirten bazı üst düzey yapılandırma dosyalarına veya örneğin ikisinin bir hibritine sahip olması gereken (örneğin, Bir yapılandırma dosyası kullanarak, gerekirse geçersiz kılınabilecek bağımlılıklar için otomatik bir çözünürlük işlemi olabilir).
Yapıcı enjeksiyonunda olduğu gibi, bunu yapmanın avantajının, yine de, yapma maliyetine çok benzeyen bir sonuç olduğunu düşünüyorum: güvendiğiniz verileri kimin sağladığını ve çoklu potansiyel olup olmadığını bilmek zorunda değilsiniz. sağlayıcılar, sağlayıcıları kontrol etmek için tercih edilen sırayı bilmek zorunda değilsiniz, veriye ihtiyaç duyan her konumun tüm potansiyel sağlayıcıları vb. kontrol ettiğinden emin olun, çünkü bunların tümü bağımlılık enjeksiyonuyla yüksek seviyede ele alınır. platformudur.
Kişisel olarak DI çerçeveleriyle ilgili çok fazla deneyimim olmasa da, benim izlenimim, ihtiyaç duyduğunuz veri veya hizmetin doğru sağlayıcısını bulma baş ağrısının baş ağrısından daha yüksek bir maliyete sahip olması durumunda, maliyetten daha fazla fayda sağlamalarıdır. bir şey başarısız olduğunda, derhal yerel olarak bilmediğinizden, hangi kodun kodunuzda daha sonra başarısızlığa neden olan kötü verileri sağladığını bilmek.
Bazı durumlarda, DI çerçevelerinin ortaya çıkması durumunda bağımlılıkları gizleyen diğer örüntüler (örn. Hizmet yer belirleyicileri) zaten kabul edilmiş (ve belki de onların değerini kanıtlamış) ve DI çerçeveleri de benimsemek gibi bazı rekabet avantajı sundukları için kabul edilmiştir. daha az boyunduruk kod kodu veya potansiyel olarak hangi sağlayıcının kullanımda olduğunu belirlemek gerektiğinde bağımlılık sağlayıcıyı gizlemek için potansiyel olarak daha az şey yapmak.