Muhtemelen birçokları gibi, genellikle kendimi tasarım problemleri ile baş ağrısına koşarken buluyorum, örneğin, sezgisel olarak problemlere uygun görünen ve istenen faydaları olan bazı tasarım desenleri / yaklaşımları var. Çoğunlukla patern / yaklaşımın, bir çeşit çalışma olmadan uygulanmasını zorlaştıran ve sonrasında paternin / yaklaşımın faydasını reddeden bazı uyarılar vardır. Pek çok model / yaklaşımla yinelemeyi çok kolay bir şekilde bitirebilirim çünkü tahmin edilebileceği gibi neredeyse hepsinin, kolay bir çözümün olmadığı gerçek dünya durumlarında çok önemli uyarılar var.
Misal:
Size son zamanlarda karşılaştığım gerçek bir örneğe dayanarak varsayımsal bir örnek vereceğim. Diyelim ki kompozisyonu kalıtım üzerinde kullanmak istiyorum çünkü kalıtım hiyerarşileri geçmişte kodun ölçeklenebilirliğini engellemişti. Ben kodu refactor olabilir ama sonra önlemek için girişimlere rağmen, üst sınıf / baseclass sadece alt sınıf işlevselliği çağırmak için gereken bazı bağlamlar olduğunu bulabilirsiniz.
Bir sonraki en iyi yaklaşım, yarı sınıfın davranışları devredebilmesi veya alt sınıfın üst sınıf olaylarını gözlemleyebilmesi için yarım delege / gözlemci örüntüsü ve yarım kompozisyon örüntüsü uygulamak gibi görünmektedir. Daha sonra sınıf daha az ölçeklenebilir ve sürdürülebilirdir, çünkü nasıl genişletilmesi gerektiği belirsizdir, ayrıca mevcut dinleyicileri / delegeleri genişletmek de zordur. Ayrıca bilgi iyi gizlenmez, çünkü bir kişi üst sınıfı nasıl genişleteceğinizi görmek için uygulamayı bilmeye ihtiyaç duyar (yorumları çok yoğun kullanmadığınız sürece).
Bundan sonra, sadece gözlemcileri veya delegeleri tamamen ağır yaklaşımları karıştırmakla birlikte gelen dezavantajlardan kurtulmak için kullanmayı tercih edebilirim. Ancak bu kendi sorunları ile birlikte gelir. Örneğin, pratikte her davranış için gözlemcilere / delegelere ihtiyaç duyana kadar artan sayıda davranış için gözlemcilere veya delegelere ihtiyacım olduğunu fark edebilirim. Bir seçenek, tüm davranışlar için sadece büyük bir dinleyici / delege sahip olmak olabilir, ancak uygulama sınıfı çok sayıda boş yöntem vb.
Sonra başka bir yaklaşım deneyebilirim ama bununla ilgili çok fazla sorun var. Sonra bir sonraki ve bir sonraki vb.
Bu yinelemeli süreç, her yaklaşımın diğerlerinden daha fazla problemi olduğu zaman çok zorlaşır ve bir tür tasarım karar felçine yol açar . Hangi tasarım modeli veya yaklaşımı kullanılırsa kullanılsın, kodun eşit derecede sorunlu olacağını kabul etmek de zordur. Bu duruma düşersem, sorunun kendisinin yeniden düşünülmesi gerektiği anlamına mı gelir? Diğerleri bu durumla karşılaştıklarında ne yaparlar?
Düzenleme: Sorunu temizlemek istediğim bir dizi yorum var gibi görünüyor:
- OOP'yi tamamen sorudan çıkardım çünkü aslında OOP'ye özgü olmadığı ortaya çıktı, ayrıca OOP hakkında geçerken yaptığım bazı yorumları yanlış yorumlamak çok kolay.
- Bazıları yinelemeli bir yaklaşım benimsemeli ve farklı kalıplar denemem gerektiğini ya da çalışmayı bıraktığında bir deseni atmam gerektiğini iddia etti. İlk etapta bahsetmek istediğim süreç bu. Bunun örnekten açık olduğunu düşündüm ama daha açık hale getirebilirdim, bu yüzden bunu yapmak için soruyu düzenledim.