IOC'nin neden benim açımdan iyi olmayabileceğini bulmaya çalışacağım.
Diğer her şeyde olduğu gibi, IOC kapsayıcısı (veya Einstein'ın söylediği gibi I = OC ^ 2), kodunuzda ihtiyacınız olup olmadığına kendiniz karar vermeniz gereken bir kavramdır. IOC hakkındaki son moda çığlığı sadece modadır. Modaya düşmeyin, ilk önce. Kodunuzda uygulayabileceğiniz sayısız kavram var. Her şeyden önce, programlamaya başladığımdan beri bağımlılık enjeksiyonunu kullanıyorum ve bu isim altında popülerleştirildiğinde terimin kendisini öğrendim. Bağımlılık kontrolü çok eski bir konudur ve neyin ayrıldığına bağlı olarak şimdiye kadar trilyonlarca yolla ele alınmıştır. Her şeyi her şeyden ayırmak saçmalıktır. IOC kapsayıcısındaki sorun, Entity Framework veya NHibernate kadar faydalı olmaya çalışmasıdır. Herhangi bir veritabanını sisteminizle birleştirmeniz gerektiğinde bir nesne-ilişkisel eşleyici yazmak bir zorunluluk olsa da, IOC kapsayıcısı her zaman gerekli değildir. Yani IOC kabı yararlı olduğunda:
- Düzenlemek istediğiniz birçok bağımlılığa sahip bir durum olduğunda
- Kodunuzu üçüncü taraf ürünüyle eşleştirmeyle ilgilenmediğinizde
- Geliştiricileriniz yeni bir araçla nasıl çalışılacağını öğrenmek istediğinde
1: Kodunuzda çok fazla bağımlılığa sahip olduğunuz ya da tasarımın erken aşamalarında farkında olduğunuz kadar sık değildir. Soyut düşünme, soyut düşünme zamanı geldiğinde yararlıdır.
2: Kodunuzu üçüncü taraf koduyla eşleştirmek HuGe problemidir. Ben 10 + yaşında ve o zaman fantezi ve gelişmiş kavramlar ATL, COM, COM + vb izleyen kod ile çalışıyordu. Artık bu kodla yapabileceğiniz hiçbir şey yok. Söylediğim şey, gelişmiş bir kavramın belirgin bir avantaj sağladığı, ancak bu uzun vadede eski avantajın kendisi ile iptal edildi. Sadece hepsini daha pahalı yapmıştı.
3: Yazılım geliştirme yeterince zor. Bazı gelişmiş kavramların kodunuzda kırpılmasına izin verirseniz, tanınmayan düzeylere genişletebilirsiniz. IOC2 ile ilgili bir sorun var. Bağımlılıkları ayırmakla birlikte, mantık akışını da ayırmaktadır. Bir hata bulduğunuzu ve durumu incelemek için bir mola vermeniz gerektiğini düşünün. IOC2, diğer gelişmiş kavramlar gibi, bunu daha da zorlaştırmaktadır. Bir kavramın içindeki bir hatayı düzeltmek, bir plainer kodundaki bir hatayı düzeltmekten daha zordur, çünkü bir hatayı düzelttiğinizde bir kavrama tekrar uyulması gerekir. (Sadece bir örnek vermek gerekirse, C ++ .NET sözdizimini o kadar çok değiştiriyor ki, .NET'in bazı eski sürümlerini yeniden düzenlemeden önce çok düşünmeniz gerekiyor.) Peki IOC ile ilgili sorun nedir? Sorun bağımlılıkları çözmektir. Çözme mantığı genellikle IOC2'nin kendisinde gizlidir, belki öğrenmeniz ve sürdürmeniz gereken nadir bir şekilde yazılmış. Üçüncü taraf ürününüz 5 yıl içinde orada olacak mı? Microsoft değildi.
"Nasıl biliyoruz" sendromu IOC2 ile ilgili her yere yazılmıştır. Bu, otomasyon testine benzer. İlk bakışta şık terim ve mükemmel çözüm, tüm testlerinizi gece boyunca yürütmek ve sabahları sonuçları görmek için basitçe koyabilirsiniz. Şirketten sonra otomatik testin gerçekten ne anlama geldiğini açıklamak gerçekten acı vericidir. Otomatik test, ürününüzün kalitesini artırmak için gece boyunca uygulayabileceğiniz hata sayısını azaltmanın kesinlikle hızlı bir yolu değildir. Ancak, moda bu kavramı sinir bozucu bir şekilde baskın hale getiriyor. IOC2 aynı sendroma sahiptir. Yazılımınızın iyi olması için onu uygulamanız gerektiğine inanılmaktadır. Her geçen gün yapılan görüşmede IOC2 ve otomasyon uygulayıp uygulamadığım soruldu. Bu bir moda işareti: şirketin MFC'de yazılan kodun bir kısmı terk etmeyecekti.
IOC2'yi yazılımdaki diğer kavramlar olarak öğrenmeniz gerekir. IOC2'nin kullanılması gerektiğine karar, ekip içinde ve şirkette verilir. Ancak, karar verilmeden önce en azından TÜM argümanlardan bahsedilmelidir. Sadece artı tarafın negatif tarafa ağır bastığını görürseniz, olumlu bir karar verebilirsiniz.
IOC2'de sadece çözdüğü sorunları çözmesi ve getirdiği sorunları ortaya çıkarması dışında yanlış bir şey yoktur. Başka hiçbir şey. Ancak, modaya karşı çıkmak çok zor, ter ağzı, her şeyin takipçisi var. Fantezileriyle ilgili sorun ortaya çıktığında hiçbirinin orada olmaması gariptir. Yazılım endüstrisindeki birçok kavram, kâr yarattığı, kitaplar yazıldığı, konferanslar düzenlendiği, yeni ürünler yapıldığı için savunulmuştur. Bu moda, genellikle kısa ömürlü. İnsanlar başka bir şey bulur bulmaz onu tamamen terk ederler. IOC2 kullanışlıdır, ancak gördüğüm diğer birçok kavramla aynı işaretleri gösterir. Hayatta kalacak mı bilmiyorum. Bunun için bir kural yok. Eğer faydalı olursa, hayatta kalacağını düşünüyorsunuz. Hayır, bu şekilde gitmiyor. Büyük bir zengin şirket yeterlidir ve konsept birkaç hafta içinde ölebilir. Göreceğiz. NHibernate hayatta kaldı, EF ikinci oldu. Belki IOC2 de hayatta kalacaktır. Yazılım geliştirmedeki çoğu kavramın özel bir şey olmadığını, çok mantıklı, basit ve açık olduğunu ve bazen mevcut adlandırma kuralını hatırlamak kavramın kendisini anlamaktan daha zordur. IOC2 bilgisi bir geliştiriciyi daha iyi bir geliştirici yapar mı? Hayır, çünkü bir geliştirici doğada IOC2'ye benzer bir kavram bulamadıysa, IOC2'nin hangi sorunu çözdüğünü anlaması zor olacak, onu kullanmak yapay görünecek ve kullanmaya başlayabilir politik olarak doğru olmak için. Yazılım geliştirmedeki çoğu kavramın özel bir şey olmadığını, çok mantıklı, basit ve açık olduğunu ve bazen mevcut adlandırma kuralını hatırlamak kavramın kendisini anlamaktan daha zordur. IOC2 bilgisi bir geliştiriciyi daha iyi bir geliştirici yapar mı? Hayır, çünkü bir geliştirici doğada IOC2'ye benzer bir kavram bulamadıysa, IOC2'nin hangi sorunu çözdüğünü anlaması zor olacak, onu kullanmak yapay görünecek ve kullanmaya başlayabilir politik olarak doğru olmak için. Yazılım geliştirmedeki çoğu kavramın özel bir şey olmadığını, çok mantıklı, basit ve açık olduğunu ve bazen mevcut adlandırma kuralını hatırlamak kavramın kendisini anlamaktan daha zordur. IOC2 bilgisi bir geliştiriciyi daha iyi bir geliştirici yapar mı? Hayır, çünkü bir geliştirici doğada IOC2'ye benzer bir kavram bulamadıysa, IOC2'nin hangi sorunu çözdüğünü anlaması zor olacak, onu kullanmak yapay görünecek ve kullanmaya başlayabilir politik olarak doğru olmak için. IOC2 bilgisi bir geliştiriciyi daha iyi bir geliştirici yapar mı? Hayır, çünkü bir geliştirici doğada IOC2'ye benzer bir kavram bulamadıysa, IOC2'nin hangi sorunu çözdüğünü anlaması zor olacak, onu kullanmak yapay görünecek ve kullanmaya başlayabilir politik olarak doğru olmak için. IOC2 bilgisi bir geliştiriciyi daha iyi bir geliştirici yapar mı? Hayır, çünkü bir geliştirici doğada IOC2'ye benzer bir kavram bulamadıysa, IOC2'nin hangi sorunu çözdüğünü anlaması zor olacak, onu kullanmak yapay görünecek ve kullanmaya başlayabilir politik olarak doğru olmak için.