Ben "anti-desen" singletons, statik yöntemler ile yardımcı sınıfları ve new
anahtar kelimeleri kullanarak kendi bağımlılıkları oluşturma sınıfları ile büyük bir kod temeli var . Bir kodun test edilmesini çok zorlaştırır.
Kod yavaş yavaş bağımlılık enjeksiyon kabına taşımak istiyorum (benim durumumda Guice
, çünkü bir GWT
proje olduğu için ). Bağımlılık enjeksiyonu anlayışımdan, hepsi ya da hiç. Tüm sınıflar Bahar / Guice tarafından yönetilir veya hiçbiri tarafından yönetilmez. Kod tabanı büyük olduğu için kodu gece boyunca değiştiremiyorum. Bu yüzden yavaş yavaş yapmanın bir yoluna ihtiyacım var.
Sorun şu ki, diğer sınıflara enjekte edilmesi gereken bir sınıfla başladığımda @Inject
, bu sınıflarda basit kullanamıyorum çünkü bu sınıflar henüz kapsayıcı tarafından yönetilmiyor. Böylece bu, hiçbir yere enjekte edilmeyen "üst" sınıflara kadar uzun bir zincir oluşturur.
Gördüğüm tek yol şu an Injector
için tek birton aracılığıyla küresel olarak bir / uygulama bağlamı sağlamaktır , böylece diğer sınıflar ondan yönetilen fasulye alabilir. Ancak composition root
, uygulamanın açıklanmaması konusunda önemli bir fikirle çelişmektedir .
Başka bir yaklaşım aşağıdan yukarıya olacaktır: "yüksek seviyeli" sınıflarla başlamak için, bunları bağımlılık enjeksiyon kabına dahil edin ve yavaşça "daha küçük" sınıflara geçin. Ama sonra uzun süre beklemek zorundayım, çünkü hala küresellere / statiklere bağlı olan daha küçük sınıfları test edebilirim.
Bu tür kademeli göçün yolu ne olabilir?
Not: Bağımlılık enjeksiyonuna kademeli yaklaşımlar başlığı benzerdir, ancak soruma cevap vermiyor.