MVC'deki Controller ve MVVM'deki ViewModel arasındaki fark nedir?


21

MVC ve MVVM arasındaki farkı net olarak göremiyorum. Bir ViewModel'deki Komut'un bir Denetleyicideki Eylem yöntemi gibi olduğunu hissediyorum. Hem Controller hem de ViewModel, Model'in durumunu Veri Bağlama yoluyla değiştirdikten sonra Görünümü yenilemesini bildirir. İki örüntü arasındaki temel fark nedir?

Yanıtlar:


25

Denetleyici ve ViewModel çeşitli şekillerde farklılık gösterir.

MVC'de Kontrolör görünümü bilir, Görünümü değiştirebilir. Aynı zamanda Modeli de bilir ve arayabilir. MVVM'de bir ViewModel, Görünümün soyut bir temsilidir ve somut kullanıcı arayüzünü bilmez, Modeli istendiği gibi görüntülenebilecek şekilde sarar.

Klasik MVC'de, bir kontrolör Görünüm'ün Model ile etkileşime girme stratejisidir . Aslında, bazen bir Denetleyici bile gerekli değildir. Farklı davranışlara ihtiyacınız varsa aynı Görünüm için farklı ViewModels'lara sahip olabileceğiniz için MVVM'de buna ihtiyacınız yoktur. MVC'de, örneğin Model ile iletişim kurmak için bir ReadOnlyController veya AdminController'a sahip olabilirsiniz. MVVM'de sadece iki ViewModeliniz olabilir ve Görünüm için ihtiyacınız olanı seçebilirsiniz.

Ama bazı benzerlikleri var. Her iki modelde de Görüş bir gözlemcidir . Klasik MVC'de, görünüm modelin bir gözlemcisidir, MVVM'de ViewModel'in bir gözlemcisidir.

Her iki örüntü de endişelerin ayrılmasını sağlamak içindir. MVVM öncelikle, kullanımdaki UI teknolojisinden tamamen bağımsız olarak Görüşün bir soyutlamasını sağlamayı amaçlamaktadır. MVC bu kadar ileri gitmiyor. Ana odak noktası endişelerin ayrılmasıdır, böylece iş mantığını (Modeli) görünüme sokmazsınız.

Ayrıca bu bulabilir cevabı yararlı benzer bir soruya benim.

Sonunda, her iki modelin de aynı aileye ait olduğunu söylemeliyim. MVVM'nin soyundan gelen MVP, MVC'nin bir kardeşidir. Daha fazla bilgi edinmek istiyorsanız, Martin Fowler'in web sitesine bu bağlantıyı takip edin , her şeyi ayrıntılı olarak açıklıyor.


bu model-görünüm mimarilerinin en iyi onları uygulayan insanlar tarafından anlaşıldığını düşünmüyor musunuz? Geliştirici için tercih edilen bir konu olduğuna inanıyorum. Birisi, MVVM veya MVVM'yi, biraz genel olarak (MVVM durumunda) görünüm hakkında tam bir soyutlama isteyip istemediğine bağlı olarak seçilir.
Pankaj Upadhyay

@Pankaj Upadhyay: Hangisini kullanmanız gerekir gereksinimlerinize ve teknoloji seçiminize ve ayrıca platformunuzun kendine özgü özelliklerine bağlıdır.
Falcon

MVC mimarisinin her şey için yeterince iyi olduğuna inanıyorum, ancak bunun nedeni özellikle MVVM gerektiren bir sorunla karşılaşmadım. IMO, kesinlikle görünüm üzerinde biraz kontrol sahibi olmanız gerekir, çünkü kesinlikle gevşek hale getirmeniz gelecekteki yükseltmelerde daha fazla hatayı artıracaktır
Pankaj Upadhyay

1
@Pankaj Upadhyay: Çeşitli UI teknolojileri için aynı mantığı kullanmak istiyorsanız MVP daha üstündür. Görünüm üzerinde bir miktar kontrole ihtiyacınız olduğunu düşünmüyorum. Tamamen bağımsız olabilir ve ViewModels'i de test edebilirsiniz - eğer daha iyi değilse. Daha iyi bir ayırma, proje üzerindeki çalışmalar daha iyi bölümlenebileceğinden tasarımcılara da fayda sağlar.
Falcon
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.