Hangi dili kullanırsak kullanalım büyük ölçekli bir uygulama geliştirirken projenin yapısını yönetilebilir, genişletilebilir ve anlaşılabilir tutmak isteriz. Uygulama mimarisini bu isteklere yanıt verebilecek biçimde seçmek isteriz. Bu kaygılar bizi (özellikle web uygulamalarında) MVC kavramına götürür.
Bu yazıda, neredeyse herkesin o veya bu biçimde duyduğu MVC kavramını diğer mimari yapılarla ilişkilerini de anlatarak açıklamaya çalışacağız.
MVC Nedir?
MVC (Model-View-Controller) bir tasarım deseni (design pattern) veya bir mimari desendir (architectural pattern). Bazı kaynaklar tasarım deseni bazı kaynaklar mimari desen demekte ancak bu konuda kesin bir kanı ve genel geçer doğru bir tanım yoktur. Kesin doğru aramak yerine MVCnin geliştiriciye ne öğütlediğini öğrenerek çıkarım yapmak en yararlısı olabilir.
MVC İlk Nasıl Çıktı?
Çok ayrıntıya girmeden, MVC kavramının 1978’de Xerox PARC şirketinde çalışan Trygve Reenskaug tarafından ortaya atıldığını[1], ilk olarak Smalltalk-80 programlama dili ile kullanılmaya başlandığını not edelim.
MVC kavramı ilk ortaya çıktığında bizim şimdi masaüstü uygulamaları olarak tanımladığımız uygulamalar için düşünülmüştü.
MVC kullanıcının kafasındaki model (mental model) ile bilgisayardaki model arasında bağ kurma sorununa çözüm olarak önerilmiş[1]. Bu sorun uygulamalar ne kadar gelişip değişirse değişsin günümüzde hala mevcut. Bu nedenle bu ortak sorunun çözümü olan MVC kavramı 35 yıl önce ortaya atılmasına ve şimdiki web uygulamalarından çok farklı uygulamalar için tasarlanmasına karşın, zamanla evrimleşip gelişerek günümüzde vazgeçilmez bir mimari kavram olarak karşımıza çıkıyor.
MVC Nasıl Çalışır?
MVC kavramı ile geliştirilen uygulamalar belli sorumlulukları uygulama içinde paylaştırırlar.
Model: Uygulama domainindeki verileri ve verilerin değişimini yönetir
View: Modellerin yani verilerin kullanıcıya UI üzerinden gösterilmesini yönetir
Controller: Kullanıcı girdilerine (input) göre modelde değişiklik yapar ve değişen modele göre viewi günceller
MVC kavramının kesin bir tanımı, bir standartı olmadığı için birkaç çeşit uygulaması vardır. Örneğin yukarıdaki tanımlar pasif view
kullanan bir MVC kavramını tanımlar. Bu kullanımda view
ı güncellemek controller
ın sorumluluğudur.
Başka bir kullanımda view
ı güncellemek modelin sorumluluğu olarak tanımlanabilir. Kullanılan tanımlar diller arasında hatta aynı dildeki uygugulama çatıları (framework) arasında bile değişik olabilir.