MVC etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
MVC etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Temmuz 2010 Perşembe

GWT ve Ext (GXT) kullanarak geliştirdiğim GMVC kullanıma hazır

Java platformunda, Google Web Toolkit (GWT) mimarisi uzerine Ext bileşenleri kullanarak geliştirdigim Model-View-Controller (MVC) çatısı ve bu çatıyı gerçekleyen, örnek MovieClub projesini sizlere sunuyorum. Bu projede, GWT ile uygulama geliştirirken (ya da başlarken diyeyim) karşılaşılan bazı sıkıntıların çözümünü bulabilirsiniz. MovieClub projesi, adından da anlaşılacağı üzere DVD/VCD kiralama/satma işi yapan firmaların iş takibini yapıyor. Yukarıda da belirttiğim gibi GMVC çatısını gerçekliyor.

GWT ile ilgili forumlarda ağırlıklı olarak aşagidaki başlıklara dair sorular bulunuyor, projede bu soruların yanıtını veren çözumler gelistirdim. Ayrıca, projenin javadoc larını tamamen Türkçe hazırladım ki framework ü inceleyen arkadaşlar sıkıntı çekmesin.

Genel olarak yaşanan sıkıntılar;

  • Hibernate implementasyonu,

  • Login formu ve kullanıcı hak denetimlerinin yapılması,

  • RPC ile SuggestionBox bileşeni geliştirilmesi,

  • MVC çatısı ve cok katmanlı programlama,

  • Jasper Report kullanımı/entegrasyonu,

  • GWT de Modül yazimi/kullanımının örneği,

  • RPC servislerin kalıtımla elde edilebilmesi,

  • Olay temelli programlama/haberleşme,

  • Projenin Ant Script ile WAR dosyasının hazırlanması


Bağlantılar
Projenin Hostu için burayı
SVN adresi için burayı
Projeden goruntuler için burayı
WAR dosyasi için de burayı kullanabilirsiniz

14 Ocak 2010 Perşembe

MVC vs MVP

Uzun zamandır kullanımda olup ve birçok projenin de anaçatısı durumunda olan MVC (Model-View-Controller) desenine rakip olarak sahneye çıkan ve Google tarafından da ateşli bir biçimde savunulan MVP (Model-View-Presenter) deseni ile ilgili bir mücadele yaşanıyor forumlarda.

Google tarafından hazırlanan sunumlara baktığımızda MVP için;
  • GWT dünyasında testleri kolaylaştırdığını
  • View ile Controller bağlantısının olmadığını
  • Daha rahat kod geliştirildiğini
Yine aynı sunumlarda MVC için ise;
  • GWT dünyasında testleri zorlaştırdığını
  • View ile Controller bağlantısının olduğunu (Katı Bağ oluşturuyor diye)
  • 1980 lerden kalma olduğunu
söylüyorlar.

Google'ın değerlendirmeleri pek insaflıymış gibi gelmedi bana. Evet GWT framework'ünde testleri kolaylaştırdığı doğru olabilir fakat MVC' de View ile Controller' un doğrudan bağlantısı olmak zorunda değil, bu tarz bir kullanım sadece programcının tercihi olabilir. Ayrıca bir teknolojinin eski olması onun kötü olduğu anlamına gelseydi bugün kullandığımız ilişkisel veritabanlarının en berbat teknolojiler olaması gerekirdi zira 1970 li yıllarda geliştirilmişti. Benzer şekilde C dili ve HTML de çok eski zamanlara ait olmalarına rağmen günümüzde yaygın olarak kullanılmakta.

MVP desenindeki Presenter, Controller ile hemen hemen aynı yapıya sahip, tek fark; MVP'de bulunan EventBus sınıfı. Bu sınıf MVP katmanları arasında haberleşmeden sorumlu. Model, View'i, View'de Presenter'ı tanımıyor. Soyutlama açısından hoş bir yaklaşım. MVP sınıflarındaki tüm olaylar EventBus tarafından handle edilidiği için dispatch da bu sınıfın denetiminde oluyor. Özetle, kimse kimseyi tanımıyor ama EventBus herkesi tanıyor ve haberleştiriyor. Bunun tek dezavantajı ise fazladan bir sınıfımızın olması.

MVP'deki EventBus işlevini MVC' deki Controller sınıfı pekala yapabilir. MVC'nin gerçekleştirimine göre, View ve Model sınıfları birbirlerini tanımayabilir ve bütün denetim Controller' da olabilir. Zaten adından da anlaşıldığı gibi Controller sınıfı herşeyi kontrol eden ve iş mantıklarının yer aldığı sınıflar olmalıdır.

Bence, kullanılan dilin imkanları ve programcının tercihlerine göre MVP olsun MVC olsun çok işe yarayabilecekleri gibi bir çok sıkıntının kaynağı da olabilirler. MVC nin en büyük avantajı, genel kabul görmüş olması ve defalarca kendisini ispat etmiş olmasıdır. MVP henüz yeni olduğu için kabul zamanına ihtiyacı var. Ayrıca MVP'nin tercih edilebilmesi için daha net kazanımlar sunması lazım. Controller'a ait bir kısım görevleri ayrı bir sınıfta ele almak ve Model ile View arası iletişim için olay temelli haberleşme yapmak çok cazip bir kazanım gibi durmuyor.