2 sentim ...
Evet ve hayır.
Sen asla gerçekten evlat ilkelerini ihlal; ancak, ilkeleriniz daima daha yüksek bir amaca hizmet etmek için nüanslı olmalı ve benimsenmelidir. Bu nedenle, düzgün bir şekilde şartlandırılmış bir anlayışla, bazı bariz ihlaller "ruh" un veya "bir bütün olarak ilkeler bedeninin" gerçek ihlalleri olmayabilir .
Özellikle SOLID ilkeleri, çok fazla nüans gerektirmesine ek olarak, nihayetinde “çalışan, bakımı yapılabilir yazılım sağlama” hedefine tabidir. Bu nedenle, herhangi bir SOLID ilkesine bağlı kalmak, SOLID'in hedefleriyle çelişen, kendini yitiren ve kendisiyle çelişen bir durumdur. Ve burada, sık sık kozlar sürdürebilirlik sağladığını not ediyorum .
Yani, ne hakkında D de KATI ? Peki, yeniden kullanılabilir modülünüzü bağlamına göre oldukça agnostik hale getirerek, sürdürülebilirliğin arttırılmasına katkıda bulunur. Ve "yeniden kullanılabilir modülü" "başka bir bağlamda kullanmayı planladığınız bir kod koleksiyonu" olarak tanımlayabiliriz. Ve bu, tek bir fonksiyona, sınıflara, sınıf kümelerine ve programlara uygulanır.
Ve evet, değişen logger uygulamaları muhtemelen modülünüzü "başka bir bağlam" a yerleştirir.
Öyleyse iki büyük uyarımı önereyim :
Birincisi: “Yeniden kullanılabilir bir modül” oluşturan kod bloklarının etrafındaki çizgilerin çizilmesi profesyonel bir yargı meselesidir. Ve kararın mutlaka tecrübenle sınırlı.
Şu anda başka bir bağlamda bir modül kullanmayı düşünmüyorsanız , çaresizce ona bağlı kalmak büyük olasılıkla iyidir . Uyarıya ilişkin uyarı: Planlarınız büyük olasılıkla yanlıştır - ama bu da sorun değil. Modülden sonra ne kadar uzun süre modül yazarsanız, "bir gün tekrar ihtiyacım olacak" anlayışı ne kadar sezgisel ve doğru olacaktır. Ancak, muhtemelen hiç bir zaman geriye dönük olarak “Her şeyi mümkün olan en büyük ölçüde modüler hale getirdim ve ayrıştırdım, ancak fazlalık olmadan ” diyemeyeceksiniz .
Yargılamadaki hatalarından dolayı kendini suçlu hissediyorsan, itirafa git ve devam et ...
İkincisi: Ters çevirme kontrolü enjekte bağımlılıklarına eşit değildir .
Bu özellikle bağımlılıkları enjekte etmeye başladığınızda geçerlidir . Bağımlılık Enjeksiyonu, kapsamlı IoC stratejisi için yararlı bir taktiktir. Ancak, DI'nin diğer taktiklerden daha az etkili olduğunu savunuyorum - arayüzler ve adaptörler kullanmak gibi - modülün içeriğine tek maruz kalma noktaları.
Ve hadi buna bir saniye odaklanalım. Çünkü, bir reklam nauseam enjekte etmiş olsanız bile , arayüze karşı kod yazmanız gerekir . Parametreleri farklı sırada alan farklı bir satıcıdan yeni bir ürün kullanmaya başlayamazsınız . Bu yetenek, modül içinde, modül içinde var olan ve bağımlılığı yönetmek için tek bir alt modüle (Adaptör) sahip olan bir arayüze karşı kodlamadan gelir .Logger
Logger
Logger
Bir Adaptöre karşı kodlama yapıyorsanız, Logger
o Adaptöre enjekte edildiğinde veya Adaptör tarafından keşfedildiğinde, genel olarak genel bakım hedefine önemsizdir. Daha da önemlisi, modül düzeyinde bir Adaptöre sahipseniz, muhtemelen herhangi bir şeye enjekte etmek saçmadır. Modül için yazılmış .
tl; dr - Prensipleri neden kullandığınıza dikkat etmeden prensipler hakkında endişelenmeyi bırakın. Ve daha pratik olarak, sadece Adapter
her modül için bir tane oluşturun. "Modül" sınırlarını nereye çizeceğinize karar verirken kararınızı kullanın. Her modülün içinden devam edin ve doğrudan Adapter
. Ve tabii, enjekte gerçek logger içine Adapter
ancak - değil o gerekebilir her küçük şeyin içine.