DI kapların anahtarı soyutlamadır . DI konteynerleri bu tasarım endişesini sizin için soyutlar. Tahmin edebileceğiniz gibi, kod üzerinde gözle görülür bir etkiye sahiptir, çoğunlukla daha az sayıda yapıcıya, ayarlayıcıya, fabrikaya ve inşaatçıya çevrilir. Sonuç olarak, kodunuzu daha gevşek bir şekilde birleştirir (altta yatan IoC nedeniyle ), daha temiz ve basittir. Her ne kadar hiçbir ücret ödemeden.
Arka
Yıllar önce, bu soyutlama çeşitli yapılandırma dosyalarını yazmamızı istedi ( bildirimsel programlama ). LOC sayısının önemli ölçüde azaldığını görmek harikaydı, ancak LOCS'ler azalırken, yapılandırma dosyalarının sayısı biraz arttı. Orta ve küçük projeler için hiç sorun olmadı, ancak daha büyük projeler için, kod ve XML tanımlayıcıları arasında% 50 dağınık “kodun derlenmesi” olması bir sıkıntı haline geldi… Yine de asıl sorun şuydu: paradigmanın kendisi. Tanımlayıcılar özelleştirmeler için çok az yer bıraktığı için oldukça esnekti.
Paradigma , ek açıklama veya nitelikler için yapılandırma dosyalarını alan, yapılandırma üzerinden konvansiyona doğru kaymıştır . XML'in yapamayacağı esnekliği sağlarken kodumuzu daha temiz ve daha basit tutar.
Muhtemelen, şu ana kadar nasıl çalıştığınızla ilgili en önemli fark budur. Daha az kod ve daha fazla sihir.
Aşağı tarafta ...
Yapılandırma üzerine yapılan sözleşme, soyutlamayı o kadar ağırlaştırır ki, nasıl çalıştığını çok az bilirsiniz. Bazen sihir görünür ve burada bir dezavantaj daha geliyor. Bir kere çalışıyor, birçok geliştirici nasıl çalıştığını umursamıyor.
Bu DI kapları ile DI öğrenenler için bir handikaptır. Tasarım kalıplarının uygunluğunu, iyi uygulamaları ve kabın soyutladığı ilkeleri tam olarak anlamıyorlar. Geliştiricilere DI ve avantajlarına aşina olup olmadıklarını sordum ve cevap verdiler: - Evet, Spring IoC'yi kullandım . (Bu ne anlama geliyor?!?)
Kişi bu "dezavantajların" her biriyle aynı fikirde olabilir veya olmayabilir. Benim düşünceme göre, projenizde neler olup bittiğini bilmek bir zorunluluktur. Aksi takdirde, tam olarak anlayamayız. Ayrıca DI'nin ne için olduğunu bilmek ve onu nasıl uygulayacağına dair bir fikre sahip olmak da dikkate alınması gereken bir artıdır.
Artı tarafta...
Tek kelime üretkenliği . Altyapı, gerçekten önemli olana odaklanmamızı sağlar. Uygulamanın işi.
Yorumlanan eksikliklere rağmen, çoğumuz için (hangi işi son teslim tarihlerine ve maliyetlere göre şartlandırılmış), bu araçlar paha biçilmez bir kaynaktır. Benim düşünceme göre, bu bir DI kaplarının uygulanması lehine ana argümanımız olmalıdır. Verimlilik .
Test yapmak
Saf DI veya kaplar uygularsak test yapmak sorun olmaz. Tam tersi. Aynı kaplar genellikle bize kutudan ünite testi için alaylar sağlar. Yıllar boyunca testlerimi termometre olarak kullandım. Konteyner tesislerine çok güvenip güvenmediğimi söylediler. Bunu söylüyorum, çünkü bu kapsayıcılar ayarlayıcılar ya da kurucular olmadan özel özellikleri başlatabilirler. Neredeyse her yere bileşenleri enjekte edebilirler!
Doğru cazip geliyor? Dikkatli ol! Tuzağa düşmeyin !!
Öneriler
Kapları uygulamaya karar verirseniz, iyi uygulamalara bağlı kalmanızı şiddetle tavsiye ederim. Yapıcıları, ayarlayıcıları ve arayüzleri uygulamaya devam edin. Kullanmak için çerçeveyi / kabı zorlayın . Başka bir çerçeveye geçişi mümkün kılacak veya asıl olanı kaldıracak. Kabı bağımlılığı önemli ölçüde azaltabilir.
Bu uygulamalar ile ilgili olarak:
DI kapları ne zaman kullanılır?
Cevabım, çoğunlukla DI konteynerlerinin lehine olan kendi deneyimlerimden etkilenecek (yorumladığım gibi, yoğun bir şekilde üretkenliğe odaklanıyorum, bu yüzden hiçbir zaman saf DI'ye ihtiyacım olmadı).
Sanırım Mark Seeman'ın bu konuyla ilgili makalesini bulacağınızı düşünüyorum , bu da saf Dİ'nin nasıl uygulanacağıyla ilgili soruyu cevaplıyor .
Son olarak, eğer Java'dan bahsetmiş olsaydık , önce JSR330 - Bağımlılık Enjeksiyonuna bir göz atmayı düşünürdüm .
Özetleme
Faydaları :
- Maliyet düşürme ve zaman tasarrufu. Üretkenlik.
- Daha az sayıda bileşen.
- Kod daha basit ve daha temiz hale gelir.
Dezavantajları :
- DI, 3. parti lib'lerine devrediliyor. Takasları, güçlü yönleri ve zayıf yönlerinin farkında olmalıyız.
- Öğrenme eğrisi.
- Çabucak bazı alışkanlıkları unuttururlar.
- Projenin bağımlılıklarının artması (daha fazla lib)
- Yansıtmaya dayalı kaplar daha fazla kaynak gerektirir (bellek). Kaynaklar tarafından kısıtlanırsak bu önemlidir.
Saf DI ile farklılıklar :
- Daha az kod ve daha fazla yapılandırma dosyası veya ek açıklama.