Burada bir öğrenci hatası yaptığımı sanıyorum ve açıklama arıyorum. Benim çözüm (C #) sınıfların birçoğu - ben çoğunluk söylemeye cesaret - Ben karşılık gelen bir arayüz yazma sona erdi. Örneğin, bir "ICalculator" arayüzü ve onu uygulayan bir "Hesap Makinesi" sınıfı, bu hesap makinesini asla farklı bir uygulama ile değiştirmeme rağmen. Ayrıca, bu sınıfların çoğu bağımlılıklarıyla aynı projede yer alır - gerçekten sadece olmaları gerekir internal
, ancak public
ilgili arayüzlerini uygulamanın bir yan etkisi haline gelmiştir.
Bence her şey için arayüz oluşturma uygulaması birkaç yanlışlıktan kaynaklandı: -
1) Başlangıçta birim test alayları oluşturmak için bir arayüzün gerekli olduğunu düşündüm (Moq kullanıyorum), ancak o zamandan beri bir sınıfın üyeleri varsa alay edebileceğini virtual
ve parametresiz bir kurucuya sahip olduğunu keşfettim. Hatalıyım).
2) Başlangıçta IoC çerçevesine (Windsor Kalesi) bir sınıf kaydetmek için bir arayüz gerekli olduğunu düşündüm, ör.
Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()...
Aslında beton tipini kendisine karşı kaydedebildiğim zaman:
Container.Register(Component.For<Calculator>().ImplementedBy<Calculator>()...
3) Bağımlılık enjeksiyonu için kurucu parametreleri gibi arayüzler kullanmak, "gevşek kuplaj" ile sonuçlanır.
Arayüzlere kızdım mı ?! "Normalde" bir arayüz kullanacağınız senaryoların farkındayım, örneğin herkese açık bir API'yı açığa çıkarmak veya "takılabilir" işlev gibi şeyler için. Benim çözüm bu tür kullanım durumlarına uyan az sayıda sınıf var, ama diğer tüm arayüzlerin gereksiz olup olmadığını ve kaldırılması gerektiğini merak ediyorum? Yukarıdaki 3. maddeyle ilgili olarak, eğer bunu yapsaydım "gevşek bağlantıyı" ihlal etmeyecek miyim?
Düzenleme : - Ben sadece Moq ile bir oyun yaşıyorum, ve bu yöntemleri alay edebilmek için genel ve sanal olmak ve genel bir parametresiz yapıcı olması için yöntemler gerektirir gibi görünüyor . Öyleyse iç dersleri alamıyorum gibi mi?