Ana içeriğe geç

Yan yana

MVCvsMVVM

MVC ile MVVM arasındaki fark nedir?

Güncellendi 2 dk okuma6 fark

Kısaca

MVC uygulamayı model, view ve girdiyi ele alan controller'a ayırır; MVVM ise model ile view arasına bir ViewModel koyar ve onları data binding ile bağlar.

MVC

Model–View–Controller (Model–Görünüm–Denetleyici)

MVC, uygulamayı veri ve mantık için Model, gösterim için View ve kullanıcı girdisini yöneten Controller olmak üzere üçe ayıran bir mimari desendir.

MVC sayfasını oku

MVVM

Model-View-ViewModel

MVVM (Model-View-ViewModel), ekranın durumunu ve eylemlerini ViewModel'in tuttuğu, View'in ona bağlandığı arayüz kalıbıdır; durum değişince arayüz de değişir.

MVVM sayfasını oku

MVC ve MVVM karşılaştırması

ÖzellikMVCMVVM
Ara katmanControllerViewModel
View nasıl güncellenirController bir view seçip render ederVeri bağlama onu otomatik günceller
KökeniSmalltalk, 1979Microsoft WPF, 2005
Tipik ortamSunucu tarafı web framework'leriMasaüstü, mobil ve reaktif ön yüzler
TestController'lar sahte isteklerle test edilirViewModel'ler hiçbir arayüz olmadan test edilir
ÖrneklerRails, Django, Laravel, Spring MVCWPF, .NET MAUI, Android Jetpack, Vue

Fark, açıklamalı

İki kalıp da veriyi ve iş mantığını, yani modeli, kullanıcının gördüğü şeyden, yani view'den ayırır. 1979'da Smalltalk'a dayanan MVC'de bir controller kullanıcı girdisini alır, modeli günceller ve render edilecek bir view seçer. Web'de Rails, Django, Laravel ve Spring MVC gibi framework'ler bunu izler: bir istek bir controller eylemine gider, o da veriyi yükler ve bir şablonu render eder.

Microsoft'ta 2005'te WPF için tanıtılan MVVM, controller'ın yerine bir ViewModel koyar: tek bir ekranın ihtiyaç duyduğu durumu ve komutları, örneğin isLoading, items ve refresh'i sunan bir nesne. View ona bildirime dayalı olarak bağlanır; böylece ViewModel değiştiğinde view kendiliğinden güncellenir, kullanıcı girdisi de bağlamalar üzerinden geri akar.

Bu, MVVM'i uzun ömürlü ekranları olan zengin istemci uygulamalarına doğal olarak uydurur: WPF'deki masaüstü uygulamaları, Android'in Jetpack ViewModel'i ya da SwiftUI ile mobil uygulamalar ve reaktif ön yüz framework'leri. ViewModel hiçbir arayüz olmadan birim testinden geçirilebilir. MVC ise her isteğin ele alınıp unutulduğu istek-yanıt temelli sunucu uygulamalarına uyar.

Sık yapılan bir yanlış, kalıplardan birinin diğerinin yerini aldığını düşünmektir. Farklı ortamlarda benzer ayrım sorunlarını çözerler; birçok modern yığın da fikirleri karıştırır: bir sunucu MVC kullanırken etkileşimli ön yüzü bileşenler ya da veri bağlamalı ViewModel'ler kullanabilir.

Hangisini kullanmalısınız?

MVC şu durumlarda doğru seçim:

  • Sunucuda render edilen bir web uygulaması geliştiriyorsunuz.
  • Her istek bağımsız olarak ele alınıp bitiyor.
  • Rails ya da Laravel gibi framework'ünüz onun üzerine kurulu.

MVVM şu durumlarda doğru seçim:

  • Uzun ömürlü ekranları olan bir masaüstü ya da mobil uygulama geliştiriyorsunuz.
  • Arayüz framework'ünüz veri bağlamayı destekliyor.
  • Ekran mantığının arayüz olmadan test edilebilmesini istiyorsunuz.

Sık sorulan sorular

MVVM, MVC'den daha mı iyi?

Genel olarak değil. MVVM veri bağlamalı zengin istemcilere, MVC ise sunucu tarafı istek işlemeye uyar. Doğru seçim platforma bağlıdır.

React MVC mi, MVVM mi?

Tam olarak hiçbiri. React bileşenleri view ile durumu tek yönlü veri akışıyla birleştirir; yine de ekran durumunu tutan hook'lar ya da store'lar ViewModel'e benzer bir rol oynar.

MVP nedir?

Model-View-Presenter, bir presenter'ın pasif bir view'i veri bağlama yerine açıkça güncellediği başka bir türdür. Eski Android ve Windows Forms uygulamalarında yaygındı.

Daha fazla

Ayarlar