Strateji kalıbı, eğer başka bir şey yapılandırırsa ve işlevsellik eklemeyi veya değiştirmeyi kolaylaştırırsa çok büyük önlemek için iyi çalışır. Ancak bence hala bir kusur var. Her uygulamada hala bir dallanma yapısı olması gerektiği anlaşılıyor. Bir fabrika veya veri dosyası olabilir. Örnek olarak bir sipariş sistemini ele alalım.
Fabrika:
// All of these classes implement OrderStrategy
switch (orderType) {
case NEW_ORDER: return new NewOrder();
case CANCELLATION: return new Cancellation();
case RETURN: return new Return();
}
Bundan sonraki kodun endişelenmesine gerek yoktur ve şimdi yeni bir sipariş türü eklemek için yalnızca bir yer vardır, ancak kodun bu bölümü hala genişletilemez. Bir veri dosyasına çekilmesi biraz okunabilirliğe yardımcı olur (tartışmalı, biliyorum):
<strategies>
<order type="NEW_ORDER">com.company.NewOrder</order>
<order type="CANCELLATION">com.company.Cancellation</order>
<order type="RETURN">com.company.Return</order>
</strategies>
Ancak bu yine de veri dosyasını işlemek için kaynak plakası ekler - verilen, daha kolay birim test edilebilir ve nispeten kararlı kod, ancak yine de ek karmaşıklık.
Ayrıca, bu tür bir yapı entegrasyon testini iyi yapmaz. Her bir stratejinin test edilmesi artık daha kolay olabilir, ancak eklediğiniz her yeni stratejinin test edilmesi için ek karmaşıklık vardır. Bu eğer olurdu bile az olmasaydı deseni kullanılmış, ama hala orada.
Bu karmaşıklığı azaltan strateji modelini uygulamanın bir yolu var mı? Yoksa bu kadar basit ve daha ileri gitmeye çalışmak, çok az veya hiç fayda için sadece bir soyutlama katmanı ekler mi?
eval
Java ile çalışmayabilir, belki diğer dillerde olabilir gibi şeylerle işleri basitleştirmek mümkün olabilir?