Enjeksiyonları kabul etmek yerine doğrudan bağımlılıklarını oluşturan 1001 müşterimiz olduğunu varsayalım. Patronumuza göre 1001'i yeniden düzenlemek bir seçenek değil. Aslında kaynaklarına erişime bile izin verilmiyor, sadece sınıf dosyalarına.
Yapmamız gereken, bu 1001 müşterinin geçtiği sistemi "modernize etmek" tir. İstediğimiz her şeyi yeniden düzenleyebiliriz. Bağımlılıklar bu sistemin bir parçasıdır. Ve bu bağımlılıklardan bazıları yeni bir uygulamaya sahip olmak için değiştirmemiz gerekiyor.
Yapmak istediğimiz şey, bu çok sayıda müşteriyi tatmin etmek için farklı bağımlılık uygulamalarını yapılandırma yeteneğine sahip olmaktır. Ne yazık ki, istemciler yapıcılara veya ayarlayıcılara yapılan enjeksiyonları kabul etmediği için DI bir seçenek gibi görünmüyor.
Seçenekler:
1) Müşterilerin kullandığı hizmetin uygulanmasını yeniden düzenleyin, böylece müşterilerin şimdi ihtiyaç duyduklarını yapar. Bang işimiz bitti. Esnek değil. Karmaşık değil.
2) Çalışmayı, bir fabrika aracılığıyla edindiği başka bir bağımlılığa devretmesi için uygulamayı yeniden düzenleyin. Artık fabrikayı yeniden düzenleyerek hepsinin hangi uygulamayı kullandığını kontrol edebiliyoruz.
3) Uygulamayı, bir hizmet bulucu aracılığıyla edindiği başka bir bağımlılığa devredecek şekilde yeniden düzenleyin. Şimdi hashmap
, küçük bir dökümün devam ettiği nesnelere bir dizi olabilecek servis bulucuyu yapılandırarak, bunların hangi uygulamayı kullandıklarını kontrol edebiliriz .
4) Henüz düşünmediğim bir şey.
Amaç:
Anlamsız karmaşıklık eklemeden eski kötü tasarlanmış istemci kodunu geleceğe sürükleyerek oluşan tasarım hasarını en aza indirin.
Müşteriler bağımlılıklarının uygulanmasını bilmemeli veya kontrol etmemeli, ancak onları inşa etmekte ısrar ediyorlar new
. Kontrol edemiyoruz new
ama inşa ettikleri sınıfı kontrol ediyoruz.
Benim sorum:
Neyi düşünemedim?
gerçekten farklı uygulamalar arasında konfigürasyon yapma olanağına ihtiyacınız var mı? Ne amaçla?
Çeviklik. Çok bilinmeyen. Yönetim değişim potansiyeli ister. Sadece dış dünyaya olan bağımlılığını yitir. Ayrıca test.
farklı uygulamalar arasında geçiş yapmak için bir çalışma zamanı mekaniğine mi yoksa sadece bir derleme zamanı mekaniğine mi ihtiyacınız var? Neden?
Derleme zamanı mekaniği muhtemelen yeterlidir. Test hariç.
uygulamalar arasında hangi ayrıntı düzeyine geçmeniz gerekiyor? Hepsi birden? Modül başına (her biri bir grup sınıf içerir)? Sınıf başına mı?
1001'den sadece biri sistemde aynı anda çalıştırılır. Tüm istemcilerin bir kerede kullandıklarını değiştirmek büyük olasılıkla iyidir. Bağımlılıkların bireysel kontrolü büyük olasılıkla önemlidir.
anahtarı kimin kontrol etmesi gerekiyor? Yalnızca sizin / geliştirici ekibiniz? Bir yönetici? Her müşteri kendi başına mı? Veya müşterinin kodu için bakım geliştiricileri? Peki mekaniklerin ne kadar kolay / sağlam / kusursuz olması gerekir?
Test için dev. Harici donanım bağımlılıkları olarak yönetici değişir. Test edilmesi ve yapılandırılması kolay olmalıdır.
Amacımız sistemin hızlı ve modernize edilebildiğini göstermektir.
uygulama anahtarı için gerçek kullanım durumu?
Birincisi, donanım çözümü hazır olana kadar bazı veriler yazılım tarafından sağlanacaktır.