TLDR
Ampirik veriler önemsizdir. Araçlar ve uygulamalar (DI gibi) belirli sorunları çözer . , Sorunlarınızı anlamak araçların nasıl kullanılacağını öğrenmek ve bir araç değerli olduğu çok açık olacaksınız - ve çok daha isabetli herhangi genelleştirilmiş, toplanmış, ampirik verilere göre sonuçları açıklamak mümkün olacak.
Ve şimdi, çok daha fazla ayrıntıyla ...
Ampirik kanıt var mı?
Elbette, muhtemelen. Ya da en azından belki. Ama kim umursar? Alakalı değil.
DI'nin istatistiksel maliyet-fayda analizi akademik olarak ilginç olabilir, ancak bireysel başarıyı tahmin etmek zorunda değildir. Toplu sonuçlar, bireysel başarıları ve başarısızlıkları gizler . Ve "Protestan" uygulamalara ilişkin verilerin özellikle zehirli olduğunu iddia edebilirim. Bu disiplinler bir "saf" uygulaması net etkisini gizleyen, her ikisi de gönülden bağlı ve aptalları, hem kendimize çekeriz ve ya hangi sen olabilir olun!
Peki, Bağımlılık Enjeksiyonunun hiç değerli olmadığını nasıl biliyoruz ?
İyi soru! Aslında BÜYÜK soru. Ve seninleyim - kimsenin haklı gösteremeyeceği dogmatik “en iyi uygulamalar” için zaman ve zihinsel çaba harcamaktan nefret ediyorum. Sorduğunuza sevindim.
Ahh. Fakat, Burada ... utandırıcı bir problem genel anlamda, sen yok biliyorum. Ve daha da utanç verici bir şekilde, kodunuz DI'yi tanıtarak hiçbir şekilde daha iyi olmayabilir.
GASP!
⊙▃⊙ . . . (╯°□°)╯︵ ┻━┻
...
Belki şimdi merak ediyorsunuz ...
Neden 'can sıkıcı şeyler ispatlanmıyor' diye rahatsız etmeyeyim?
Her şeyden önce, hadi - tartışmanın her iki tarafında - sadece yerleşelim. Dogmatizm ile şüphecilik arasında güzel bir akıl ve düzlük cenneti bulunduğunu garanti edebilirim. (Ve ara sıra eksantrik SE.SE yazısı.) Ve POAP sizi oraya götürebilir.
... Demek istediğim, İlkeleri Uygulama Prensibi :
İlkeler, kalıplar ve uygulamalar nihai amaç değildir. Bu nedenle, her birinin iyi ve uygun bir şekilde uygulanması, üstün ve daha nihai bir amaçtan esinlenir ve kısıtlanır .
Yaptığın şeyi neden yaptığını anlamalısın!
(POAP, POAP'tan muaf değildir.)
("Vurgu mayın" derdim ama yine de kendi "blogum" dan. Yani, hepsi benim!)
Oradaki ana noktayı tekrarlayayım: Yaptığınız şeyi neden yaptığınızı anlamanız gerekiyor.
Ve belki de açıklığa kavuşturmak için, belirli bir "şey" (Bağımlılık Enjeksiyonu gibi) almak ve hangi sorunu çözdüğünü anlamadan - özellikle sizin için - genellikle mantıklı değildir . Sorunlarınızı ve "DI" gibi "bir şeyin" nasıl işlediğini anlarsanız, genelleşmiş, toplu, ampirik verilerin ne önerdiğine bakılmaksızın "bir şeyin" ne kadar yararlı olduğu bir şekilde "açık" olacaktır.
DI yardımseverlik veya varsa un Sebebin güçlerin ötesinde ya da en azından - - Size -helpfulness açık değildir ya DI anlamıyorum, ya da kendi sorunları anlamıyorum.
Gerçek dünya "benzetmesi" ni ele alalım.
Bir kutu yapmamız gerekiyor. Odunumuz var. Tırnaklarımız var. Ve iki aracımız var: Standart bir pençe çekiç ve bir tornavida .
Şimdi, tornavidalarla inşa edilen kutuların, çekiçlerle inşa edilenlere kıyasla genel olarak önemli ölçüde daha sağlam kutular olduğunu gösteren bazı ampirik verilerimiz olabilir. Ancak, bu tırnakları vidalamaya çalışırsanız, bir kutu ile sonuçlanmazsınız. Ve, bunları tornavida ile sokmaya çalışırsanız, sonunda onları içeri alabilirsiniz; ancak, önemli ölçüde daha fazla zaman ve çaba gerektirecektir ve nihai sonuç, çekici kullandığınızdan daha az kesin (ve sağlam) olacaktır.
Ve daha önce birinin herhangi bir aracı kullandığını gördüyseniz ve bir kutunun nasıl göründüğünü anlarsanız, karar açıktır.
Telekinezi!
Hata ... hmm ...
Evet, Peki, Bağımlılık Enjeksiyonu hangi problemi çözüyor?
Genellikle, bu nedenle un- olan önler katı, un tarafından yapılandırılabilen kod çalışır test edilebilir .
Bunu, bir modülün hangi nesnelerle çalışacağına karar vermek için kod çağırarak izin verir . Ve düşündüğünü biliyorum ve haklısın: Bu uzaktan yeni bir kavram bile değil. Cebir gerçekleştiği için yöntem / fonksiyon parametreleri mevcuttur.
Dengesizliklerimizi görmek için yeterli kodu biriktirip miras aldığımızda, temel parametre geçişini analiz etmeye başladık, buna "Bağımlılık Enjeksiyonu" adını verdik. Üzerine oturduğumuz kod dağları , sadece bağımlılıklar gizlendiği için kolayca değiştirilemez, test edilemez ve hatta tekrar kullanılamazdı .
Bu nedenle, Bağımlılık Enjeksiyonu için gayretli haçlı seferi ...
K. Ama argümanları gayet iyi iletebilirim. Neden çerçeveler ?
Anladığım kadarıyla, DI çerçeveleri temel olarak kazan plakası birikimi problemini çözer (aşırı hevesli DI, IMO nedeniyle) - özellikle de bunları gerektiren tüm modüller için standart "varsayılan" bağımlılıklar olduğunda. DI çerçeveleri, çağrılma noktasında açıkça geçilmediğinde bu varsayılan bağımlılıkları kaydırmak için sihirli (potansiyel olarak yaramaz!) Şeyler yapar. ( Bu şekilde kullanıldığında Servis Bulucu ile aynı etki , dikkat edin!)
Bağımlılık Enjeksiyon, bir "disiplin" olarak, gerçekten doğru bir şekilde yapılması zordur. DI kullanma ya da kullanma meselesi değil; hangi bağımlılıkların değişebileceğini veya alay edip bunlara enjekte edilmesi gerektiğini bilmek meselesidir . Ve sonra, DI'nin Hizmet Konumu gibi bazı alternatiflerden daha iyi uyup uymadığına karar vermek meselesi ...
Ancak, sizi Google'a teşvik ediyorum , belki de bu SO cevabını görüyorum , muhtemelen endüstrinizdeki süper deneyimli ve başarılı bir geliştiriciyle konuşun ve CR.SE'ye belirli örnekler gönderin .