MVC, MVP, MVVM

Paternler

  • MVC (Model-View-Controller),

  • MVP (Model-View-Presenter),

  • MVVM (Model-View-ViewModel)

  • MVPVM

Business işleriyle Presentation işleri birbirlerinden ayrılması gerekliliği ile doğruş paternlerdir.

Controller kullanıcıdan gelen inputları karşılar, ayrıca UI ile ilgili bütün akışı yönetir ve kararları verir. Controller View hakkında hiç birşey bilmez ama View Controller’ı bilir. Görüldüğü üzere Controller ile View arasında 1-n bir ilişki var yani bir Controller birden fazla View tarafından kullanılabilir. Controller kullanıcıdan gelen inputlar doğrultusunda Model üzerinde değişikleri yapar, Model değiştiğini View’e notify eder yani View ile Model arasında Observer ilişkisi var. View, Model’e register olur, görüldüğü üzere bir model’e birden fazla View register olabilir. Aralarında ki observer ilişkisi sayesinde, Model’deki herangi bir değişiklik ona register olmuş bütün View’lere yansır.

View’in güncellenmesi için, Controller’ın Model’i güncellemesi gerek ki Model’de değiştiğini View’e bildirebilsin.

Tavsiyem bir Windows Forms uygulaması yazıyorsanız, klasik MVC’yi kullanmamınız yönünde

ASP.NET MVC’de ise Front Controller mantığını var. Yani Controller karar mekanizması, her HTTP request Controller’da ki bir method’a (Action) denk geliyor, Controller Model ve View’i yeniden oluşturuyor, gerekirse manipulasyonları yapıyor. Controller bu kadar iyi ayrıldığı içinde Unit Test çok kolay yapılıyor.

Buradaki en büyük fark MVC’nin aksine Presenter’ın View’i bir interface aracılığıyla kendisinin güncellemesi.

Presenter View’in nasıl bir View, Web mi? Windows mu? olduğuyla ilgilenmiyor, sadece data akışıyla ilgili ne yapması gerektiğini, View’den gelen etkileşimleri nasıl karşılaması gerektiğini ve View’de nasıl değişikler yapması gerektğini biliyor. Yani Prensenter’ımız burada karar mekanizaması rölünü üstleniyor.

View buradak kendi state tutma görevinide üstlenmiş.

Görüldüğü üzere MVC’ye göre daha temiz ve anlaşılır bir yaklaşım söz konusu.

şahsi kanaatim, Model, View ve Presenter üzerinde ki sorumlulukları daha iyi dağıtılmış olması yönünde.

MVP ile hem Windows Forms hem ASP.NET Web Forms uygulamalarını çok rahat geliştirebilir.

2018

Last updated