Etiketler
Açık Kapalı Prensibi, Chain Of Responsibility, Factory, Makale, OOD, OOP Kavramları, Prensipler ve Desenler
1-Factory – Chain Of Responsibility Karmaşası / Açık Kapalı Prensibi İhlali

Factory Deseninin kullanımını tasarım prensiplerine aykırı inşa edilmiş. Bunun sebebi ise örneğin bu desenle modellene- meyeceğidir.
Başta zaten Case-Else Blokları açıyorsanız, durun bir daha düşününü bu kez demiyeceğim ama bu işlemi yaptığınız yer eğer sizin ana sınıfınız ise, durun iki kere düşünün. Çünkü her bir medya türü çıktığında gidip orayı deşeceksiniz. Bu daha önce de verdiğim her keşfettiğimiz yeni bir yiyeceği sindirebilmek için vucudumuzu açıp, sindirim sistemimize o yeni yiyeceğin nasıl sindirileceğini öğretmekle aynı şey. Bu mümkün müdür ? Teknik olarak mümkünse de hiç bir zaman tercih etmeyeceğimiz bir şeydir tabiki de 🙂
Örnek özelinde konuşmak gerekirse, her bir medya türünün kapasitelerine göre bir zincir oluşturulup, ilk halkadan başlayarak, gideceği yere kadar zincir üzerinde dolaştırmalıydık. Eğer yazılmak istenen veri o medya türünün kapasite aşmıyorsa, o medya türüne, aşıyor ise de successor’una yönlendirmeliydik.
( Bkn: Chain Of Responsibility)Chain of Responsibility kullanılmasını gereken yerde Factory deseni kullanılmaya zorlamış ve doğal olarak Açık Kapalı prensibinin sınıfların değişmeye kapalı olma zorunluluğuna aykırı düşmüş.
Bir kod yazıldığı zaman sadece Client tarafı değişmeye açıktır, tüm alt sınıfların içeriği paketlenmiş olarak kapalı olmalıdır. Sadece yeni (alt) sınıflar eklenerek genişleyebilmelidirler. Her yeni türde Factory sınıfın içeriğine girip Case Bloğuna satırlar ekleyerek olmamalıdır.
Yukarıdaki örnekte bunun hatalı olduğu açıkça görülmektedir.