Model View Controller mimari tasarımını anlamak…

Yanlış anlıyoruz.. çünkü yanlış taraftan bakıyoruz..

MVC tasarım kalıbının web dünyasında çok fazla yaygınlaşmasının ve bu alanda çok fazla framework çıkmasının sebebini, genel olarak web 2.0 ile gündeme gelen “pazarlama terminolojisi” ile (bu tanım bana değil, Google CEO’su Eric Schmidt’e ait) bağdaştırabiliriz… Özellikle SEO optimizasyonu vs gibi gereksinimler ve geliştiricilerin ve tasarımcıların birbirlerinden bağımsız olarak iş yapabilmesine olanak sağlayan kapsamların ayrıştırılması (seperation of concerns) , REST, WAI vs gibi işimizi kolaylaştıran ve standartlara uygunluğu getiren güzellikler ile birlikte MVC artık mainstream uygulama geliştirme yöntemi diyebiliriz…

Burada benim üzerinde durmak istediğim konu ise, MVC’nin teknik olarak yanlış anlaşılması durumu. MVC, web uygulamalarına özel bir pattern değildir ! ilk olarak XEROX PARC’da Trygve Reenskaug tarafından ortaya atılmıştır.

Web uygulamalarında kullanıldığı gibi, masaüstü uygulamalarında, kurumsal uygulamalarda etc. kurgulanıp uygulanabilir. MVC hakkında atıp tutarken, soyut düşünmek çok önemli, zira, MVC anlatırken de yanlış yorumlara mahal vermemek için, şöyle ki;

Aşağıda, MVC’nin UML notasyonu ile gösterimine bakalım..

düz çizgiler direct association, kesikli çizgiler indirect association anlamına geliyor…

anlatın bakalım, MVC web uygulamalarında, indirect association neye tekabül ediyor ?

anlamı yok gibi ? zira buradaki indirect association, aslında View ile Model arasındaki observer pattern’ına tekabül eden bir notasyon, aşağıdaki resimde daha detaylı bir MVC implementasyonunu görüyoruz..

mesele teknik olarak şu; MVC’de observer pattern’ı web uygulamaları için direkt olarak gerçekleyemezsiniz. Çünkü, observer için, sunucu tarafında modelin herhangi bir state değişikliği durumunda, ona kendini register etmiş view’i haberdar edeceği, dolayısı ile, modeldeki herhangi bir değişimin, anında view’e yansıyacağı varsayımı vardır. Web uygulamaları için bu mümkün değil, zira http stateless bir protokol, dolayısı ile, view’i model’e observer ile register edemezsiniz… ( belki AJAX ile belirli zaman aralıklarında http istekleri gonderip, modelin state değişimlerini sorgulayabilir, dolayısı ile bir nevi hacking ile bunu başarabilirsiniz ya da comet ile bir workaround bulabilirsiniz.. comet daha mantıklı görünüyor ama deneyen varsa beni de aydınlatsın lütfen :) observer comet ile web uygulamalarında ne kadar düzgün çalışıyor bilmiyorum )

özet: MVC sadece web uygulamalarına has bir pattern değildir. MVC, uygulandığı bağlama göre teknik olarak değişiklikler gösterebilir. Önemli olan, arayüz , iş kuralları ve modeli ayrıştırmak ve birbirileri ile olan etkileşimi azaltmak (loosly coupled layers & highly maintainable applications and better testing support)

Senin fikrin nedir ?

Adın: (Gerekli)

E-posta: (Gerekli)

Website:

Yorum: