Diyelim ki bir uygulama için raporlama fonksiyonu geliştiriyorsunuz. Bu raporların CVS ve HTML formatını desteklemeleri gerekiyor. Bu durumda iki seçeneğiniz var:
- İki fonksiyon yazmak
- Rapor datasını alıp CSV çıktı üreten bir fonksiyon,
- Rapor datasını alıp HTML çıktı üreten bir fonksiyon.
- Bir raporlama sistemi yazmak;
- CSV ve HTML için iki şablon tasarlanır,
- Raporlama sistemine Rapor Datası verilir,
- Raporlama sistemine Rapor Şablonu verilir,
- Raporlama sistemi bu iki bilgiyi birleştirip raporları oluşturur,
- Bu altyapı kullanıcıdan gizlenir içeride kullanılır. Gerekirse gelişmiş kullanıcılarda bu rapor sistemini kullanarak daha sonradan yeni rapor tipleri üretebilirler. Mesela XML rapor alabilirler.
Birinci yolun avantajları ve dezavantajları:
- Hızlı bir şekilde sonuca ulaşmak, kodun çok daha basit olması.
İkinci Yolun Avantajları
- Prezantasyon ile datanın temiz şekilde ayrılmış olması,
- Daha sonradan yeni bir rapor formatı gerektiğinde tekrar kod yazmaya gerek olmaması,
- Daha sonradan bu fonksiyonun kullanıcılara açılabilmesi.
Şimdi geniş ölçekte farklı yolları seçen yazılımları görelim:
- Internet Explorer
Birinci yolu seçen yazılımlardan. - Firefox
İkinci yolu seçen yazılımlardan. Firefox bir onlarca fonksiyonu XUL Framework' ü üzerine inşa etti. Dolayısla aynı raporlama sistemi gibi XUL sistemini yazdılar. Daha sonradan geniş bir API ile onu desteklediler ve aynı herhangi biri Firefox için eklenti (addon) yazarmış gibi Firefox' un iç sistemini geliştirdiler. Daha sonrada bunu kullanıcıya açtılar. Açılan API çok güçlüydü çünkü geliştiriler XUL ile bir şeyler geliştirirken API yüzünden tıkandıklarında API' ı geliştirdiler dolayısıyla tüm sistem çok daha güçlü bir hal aldı.
Benzer örneklerden gidersek Macromedia' nın hemen hemen tüm ürünleri de aynı şekilde geliştirilmiştir. Ana motor JavaScript + Macromedia' nın güçlü API larını destekler. Aynı XUL gibi JavaScript ve bu API' lar birleştirilerek extension' lar yazılabilir. Eğer Dreamweaver, Flash gibi yazılımların altyapılarını incelerseniz ana sistemden sonraki hemen hemen tüm yazılımın JavaScript ile yazılmış olduğunu görebilirsiniz. Yani bu kodları değiştirerek aslında tüm yazılım arabirimlerine kadar değiştirebilir ya da yeni fonksiyonalite ekleyebilirsiniz.
Burada bence unutulmaması gereken şey geliştirilen yazılımın boyutudur. Yani Macromedia ya da Firefox bu tip bir framework' ü destekleyebilir ama küçük bir takım için bu seçim büyük bir yanlış olabilir. Ama raporlama sistemi küçük olduğundan tek kişi olarak çalışan bir geliştirici bile raporlama sistemini özel bir çözüm yerine bu şekilde genel bir çözüm olarak geliştirebilir.
Benim naçizane fikrim iyi programcılar her zaman ikinci genel çözümü yapmak ister, ancak hayatın gerçekleri işin yönünü değiştirebilir.
