Bir sistemi tasarlarken, sıklıkla diğer modüller tarafından kullanılan bir grup modülün (kayıt, veritabanı erişimi, vb.) Olması problemiyle karşılaşıyorum. Asıl soru, bu bileşenleri diğer bileşenlere nasıl sunacağım. İki cevap olası bağımlılık enjeksiyonunu veya fabrika şablonunu kullanarak görünmektedir. Ancak her ikisi de yanlış görünüyor:
- Fabrikalar testi zorlaştırıyor ve uygulamaların kolayca değiştirilebilmesine izin vermiyor. Ayrıca bağımlılıkları belirginleştirmezler (örneğin, bir metodu inceliyorsunuz, bir veritabanını kullanan bir metodu çağıran bir metodu çağırdığı gerçeğinden habersiz).
- Bağımlılık enjeksiyonu, yapıcı argüman listelerini toplu olarak şişirir ve tüm kodunuzu kodlar. Tipik durum, yarıdan fazla sınıfın kurucularının böyle görünmesidir.
(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d)
İşte tipik bir durum var: Sorunum var: Veritabanından yüklenen hata açıklamalarını kullanan ve kullanıcı oturumu nesnesindeki kullanıcı dili ayar parametresi olan bir sorgu kullanarak istisna sınıfları var. Yeni bir İstisna oluşturmak için bir veritabanı oturumu ve kullanıcı oturumu gerektiren bir açıklamaya ihtiyacım var. Bu yüzden, bir istisna atmam gerekebilir diye, tüm bu nesneleri tüm yöntemlerim boyunca sürüklemeye mahkumum.
Böyle bir problemi nasıl çözebilirim?