MVC, MVP ve MVVM tasarım deseni arasındaki kodlama c # arasındaki fark nedir


203

Google'da "MVC, MVP ve MVVM tasarım deseni arasındaki fark nedir" ifadesini kullanarak arama yaparsak, MVC MVP ve MVVM tasarım deseni arasındaki farkı teorik olarak tartışan birkaç URL alabiliriz :

MVP

Veri bağlamı üzerinden bağlamanın mümkün olmadığı durumlarda kullanın. Windows Forms bunun mükemmel bir örneğidir. Görünümü modelden ayırmak için bir sunucuya ihtiyaç vardır. Görünüm sunucuya doğrudan bağlanamadığından, bilgi bir arayüz (IView) aracılığıyla görünüme aktarılmalıdır.

MVVM

Veri bağlamı üzerinden bağlamanın mümkün olduğu durumlarda kullanın. Neden? Her bir görünüm için çeşitli IView arabirimleri kaldırılır, bu da daha az kod saklanması anlamına gelir. MVVM'nin mümkün olduğu bazı örnekler, Knockout kullanan WPF ve javascript projelerini içerir.

MVC

Görünüm ve programın geri kalanı arasındaki bağlantının her zaman mevcut olmadığı durumlarda kullanın (ve MVVM veya MVP'yi etkili bir şekilde kullanamazsınız). Bu, bir web API'sının istemci tarayıcılarına gönderilen verilerden ayrıldığı durumu açık bir şekilde açıklar. Microsoft'un ASP.NET MVC'si, bu tür durumları yönetmek için harika bir araçtır ve çok net bir MVC çerçevesi sağlar


Ancak teorik olarak örnek kodla birlikte farkı tartışan tek bir makale bulamadım.

Kod ile birlikte bu 3 tasarım deseni (MVC, MVP & MVVM) arasındaki farkı tartışan bir makale alırsam gerçekten güzel olurdu.

Bu üç tasarım deseni (MVC, MVP ve MVVM) tarafından uygulanan 3 benzer CRUD uygulamasının kaynak kodunu almak istiyorum . Böylece kod üzerinden gidip nasıl bu üç tasarım pıtırtı (MVC, MVP & MVVM) için kod yazmak gerektiğini anlayabiliyorum.

Bu nedenle, kodun bu 3 tasarım deseni (MVC, MVP ve MVVM) için nasıl farklı görüneceğini tartışan herhangi bir makale varsa, lütfen beni bu makaleye yönlendirin.


14
TechEd 2011'de bu 3 model hakkında iyi ama basit bir sunum yapıldı. Konuşmacı, C # ve Visual Studio kullanarak aynı iş modeli üzerinde örnekler yaptı ve gösterdi. İşte kanal9 MVC, MVP ve
Marco Medrano

2
İşte makale: realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android . Çok iyi yazılmış ve net bir IMO. Ayrıca her desen için bir kolu olan bir Github deposuna sahiptir.
cuddlecheek

Yanıtlar:


101

Bazı temel farklılıklar kısaca yazılabilir:

MVC:

Geleneksel MVC,

  1. Model: Veri için model görevi görür
  2. Görünüm: Kullanıcıya UI olabilecek kullanıcıyla ilgilenir
  3. Denetleyici: Modelin ve görünüm arasındaki etkileşimi denetler; burada görünüm modeli güncellemek için denetleyiciyi çağırır. View, gerekirse birden fazla denetleyiciyi çağırabilir.

MVP:

Geleneksel MVC'ye benzer, ancak Controller'ın yerini Presenter alır. Ancak Presenter, Controller'ın aksine görünümü değiştirmekten de sorumludur. Görünüm genellikle sunum yapan kişiyi çağırmaz.

MVVM

Buradaki fark Görünüm Modelinin varlığıdır. Modeldeki değişikliklerin de görünümde VM tarafından temsil edildiği bir tür Gözlemci Tasarım Deseni uygulamasıdır. Örn: Bir kaydırıcı değiştirilirse, yalnızca model güncellenmez, görünümde görüntülenen metin olabilecek veriler de güncellenir. Yani iki yönlü veri bağlaması var.


1
Küçük ayrıntı - iki yönlü veri bağlama olup olmadığını seçebilir veya tek yönlü bağlama tanımlayabilirsiniz.
Jviaches

10
"Görünüm genellikle sunucuyu çağırmaz"? bu cümle hakkında daha fazla bilgi verebilir misiniz? Eğer UI görünümü kimin göndereceği sunucuyu aramayacaksa?
Amir Ziarati

3
@AmirZiarati Sunucu olayları takip eder. Etkinlik olması durumunda, sunucu devreye girer ve gerekli işlemleri yapar.
Pritam Banerjee

evet, görüntülemek için bir referans olduğu sürece. yanlış anladım ben bile görünüm en azından bir kez gerekir başlangıçta bir sunumcu aramak gerekmez demek düşündüm. teşekkürler;)
Amir Ziarati

1
@PritamBanerjee, Açıklamadan hem MVP hem de MVVM neredeyse aynı işleve sahiptir. P veya VM hem M & V'yi günceller
Manohar Reddy Poreddy

45

MVC, MVP, MVVM

MVC (eski olan)

MVP (düşük bağlantısı nedeniyle daha modüler. Presenter, View ve Model arasında bir aracıdır)

MVVM (VM ve UI bileşeni arasında zaten iki yönlü bağlantınız var, bu nedenle MVP'den daha otomatiktir) resim açıklamasını buraya girin

Başka bir resim: resim açıklamasını buraya girin


24
Lütfen resimleri kopyalamayın - özellikle kendi aralarında aynı fikirde olmadıklarında. Bkz. MVC (görmediğiniz eski tarayıcı), üst resimde görüntülemek için tarayıcı görüşmelerini, ancak alt resimde kontrolör ile görüşür.
peter.fr

1
@UddhavGautam İlk resim Görünüm'ü giriş noktası, ikincisi Denetleyici'yi gösterdiğinden biraz kafa karıştırıcı.
everlasto

1
İlk diyagramda MVVM ve MVP arasındaki fark nedir? Gördüğüm gibi, sadece V ve VM / P arasındaki bağlantılar. Hangi bir durumda iki yönlü bir bağlantı olarak ileri ve geri mesajları vardır, diğerinde iki tek yönlü bağlantı olarak temsil edilir. Aralarında fonksiyonel bir fark görmüyorum. Neyi kaçırıyorum?
iCyberPaul

1
Tarayıcı, sizinle uygulama arasında etkileşimin gerçekleştiği kullanıcı anlamına gelir.
Uddhav Gautam

4
Dönüm noktası: kimse ne olduğunu bilmiyor. Aslında hepsi aynı şey. Haha. Hayır ama gerçekten, bu "yararlı" görüntülerle bile, halkanın neler olduğunu işlemek zor. Bence bu sorunun / karışıklığın bir parçası.
Andrew

34

Bağlantıdan Büyük Açıklama: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

İlk önce MVC'ye bakalım

Giriş, görünüme değil, önce Denetleyiciye yönlendirilir. Bu girdi, bir sayfa ile etkileşime giren bir kullanıcıdan geliyor olabilir, ancak aynı zamanda tarayıcıya belirli bir url girmek de olabilir. Her iki durumda da, bazı işlevleri başlatmak için arayüzlü bir Denetleyici.

Denetleyici ile Görünüm arasında birebir ilişki var. Bunun nedeni, tek bir denetleyicinin yürütülen işleme bağlı olarak oluşturulacak farklı görünümleri seçebilmesidir.

Denetleyiciden Görünüme tek yönlü bir ok vardır. Bunun nedeni, Görünüm'ün denetleyici hakkında herhangi bir bilgisi veya referansı olmamasıdır.

Denetleyici Modeli geri gönderir, bu nedenle Görünüm ile ona geçirilen beklenen Model arasında bilgi vardır, ancak ona hizmet veren Denetleyici yoktur.

MVP - Model Görünümü Sunucusu

Şimdi MVP modeline bakalım. Bazı temel ayrımlar dışında MVC'ye çok benziyor:

Giriş, Presenter ile değil View ile başlar.

Görünüm ile ilişkili Sunucu arasında bire bir eşleme vardır.

Görünüm, Sunum Yapan kişi için bir referans tutar. Presenter aynı zamanda Görünüm'den tetiklenen olaylara da tepki gösterir, bu yüzden onunla ilişkili Görüş'ün farkındadır.

Presenter, Görünümü Model üzerinde gerçekleştirdiği istenen eylemlere göre günceller, ancak Görünüm Modelden haberdar değildir.

MVVM - Model Görünümü Görünüm Modeli

Önümüzdeki MVC ve MVP kalıpları ile, MVVM modeline bakalım ve hangi farklılıkları tuttuğunu görelim:

Giriş, Görünüm Modeli ile değil Görünüm ile başlar.

Görünüm, Görünüm Modeli'ne bir referans tutarken, Görünüm Modeli'nin Görünüm hakkında hiçbir bilgisi yoktur. Bu nedenle, çeşitli Görünümler ve bir Görünüm Modeli arasında bire-çok eşleme yapmak mümkündür… teknolojiler arasında bile. Örneğin, bir WPF Görünümü ve bir Silverlight Görünümü aynı Görünüm Modelini paylaşabilir.


7
"Bunun nedeni, Görünümün denetleyici hakkında herhangi bir bilgisi veya referansı olmamasıdır." Bu doğru değil
Adam Wolski

@AmirZiarati ViewModel MVP'nin değil MVVM modelinin bir parçasıdır.
Joe

Bu kalıbı nerede kullanabileceğimiz gibi örnekler verirseniz iyi olur
JKA

3

Aşağıdaki görüntü Erwin van der Valk tarafından yazılan makaleden alınmıştır:

MVC, MVP ve MVVM açıklayan resim - Erwin Vandervalk

Makale farklılıkları açıklanmış ve C # bazı kod örneklerini verir


Yukarıdaki görüntüler kafa karıştırıcı değildir, MVC'de olduğu gibi VIEW neden Model'e doğrudan erişiyor? diğerleri için aynı mı?
smkrn110

Bu diyagramlarda okların ne anlama geldiği açık değildir. Ok erişim veya manipülasyon anlamına mı geliyor? MVC şemasında neden Model'den başlayan ok olmadığı açık değil
Pontios
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.