Son zamanlarda iş dışında jTable projem üzerinde oldukça yoğun çalışıyorum. Ancak JavaScript kodları 2000 satıra dayandı. Her ne kadar küçük fonksyonlar halinde düzgün yazsam, ara ara refactor etsem de genel tasarımı iyileştirmek için daha iyi bir yol/desen bulmak gerekti. jQueryUI widget mimarisine göre geliştirdiğim için biraz zorlandım haliyle. İnternette araştırdım ancak %100 benim istediğim gibi bir çözüm yok.

İstediğim şey şu: PlugIn'in (widget) temelini bir sınıfta (widget'da nesne oluyor aslında) topladıktan sonra ek özellikler için ayrı sınıflar tasarlamak ve mevcut sınıfı bu özelliklerle genişletmek. Ancak bunu yaparken kalıtım yapmak istemiyorum çünkü mevcut olanı kapsayan yeni bir widget yapmıyorum, olana ek özellikler ekliyorum, dekore ediyorum bir nevi. Aslında istediğim şey sınıfın kodlarını birbiriyle ilişkili olacak şekilde bölmek. Bu yüzden her ek özelliği ayrı sınıfta yapmak istiyorum. Haliyle kalıtım kullansam 10'larca üst üste kalıtım yapmak lazım. Bana decorator gibi bir pattern lazım ama widget yaparken o da pek kolay olmuyor. Nihayetinde basit bir çözüm yeterli: Widget'a yeni option'lar, field'lar, method'lar ekliyim, mevcut metodları override edebileyim ve override ettiğim metod'dan base widget'daki ezdiğim metodu da çağırabileyim. Kullanan kişi kodu tek bir sınıf gibi görecek ama kodları mantıksal olarak ayırmış olacağım.

Sonuçta buna uygun bir mimari tasarladım, bunu da sitemin ingilizce sayfasında yayınladım (İngilizce yayınlayınca daha çok insana ulaşıyorum napıyım :) İngilizce'de problem yaşayan olursa burada yorum bölümünden sorularını iletebilirler. Aşağıda İngilizce yazıma bağlantı var:

http://halilibrahimkalkan.com/en/post/2011/11/15/extensible-jQueryUI-widget-development.aspx