Jaka jest różnica między kontrolerem w MVC a ViewModel w MVVM?

21

Nie widzę wyraźnie różnicy między MVC i MVVM. Wydaje mi się, że polecenie w ViewModel jest jak metoda akcji w kontrolerze. Zarówno kontroler, jak i ViewModel powiadomią widok, aby odświeżył się po zmodyfikowaniu stanu modelu poprzez powiązanie danych. Jaka jest główna różnica między tymi dwoma wzorami?

TomCaps
źródło

Odpowiedzi:

25

Kontroler i ViewModel różnią się na różne sposoby.

W MVC kontroler zna widok, może zmienić widok. Zna również model i może go nazwać. W MVVM ViewModel jest abstrakcyjną reprezentacją widoku i nie zna konkretnego interfejsu użytkownika, otacza model w taki sposób, aby można go było wyświetlać zgodnie z potrzebami.

W klasycznym MVC kontroler jest tylko strategią widoku do interakcji z modelem. W rzeczywistości czasami kontroler nie jest nawet potrzebny. W MVVM nie potrzebujesz go, ponieważ możesz mieć różne ViewModels dla tego samego Widoku, jeśli potrzebujesz różnych zachowań. W MVC możesz na przykład mieć ReadOnlyController lub AdminController do komunikacji z modelem. W MVVM możesz mieć tylko dwa modele ViewModels i wybierasz ten, którego potrzebujesz do widoku.

Ale mają pewne podobieństwa. W obu wzorach Widok jest obserwatorem . W klasycznym MVC widok jest obserwatorem modelu, w MVVM jest obserwatorem modelu ViewModel.

Oba wzorce mają na celu rozdzielenie obaw. MVVM ma przede wszystkim zapewnić abstrakcję widoku, całkowicie niezależną od używanej technologii interfejsu użytkownika. MVC nie posuwa się tak daleko. Skupia się przede wszystkim na oddzieleniu problemów, aby nie wyświetlać logiki biznesowej (modelu).

Pomocna może być również moja odpowiedź na podobne pytanie.

W końcu powinienem powiedzieć, że oba wzorce należą do tej samej rodziny. MVP, którego potomkiem jest MVVM, jest rodzeństwem MVC. Jeśli chcesz dowiedzieć się więcej, skorzystaj z tego linku do strony Martina Fowlera , on wyjaśnia wszystko szczegółowo.

Sokół
źródło
nie sądzisz, że te architektury widoku modelu są najlepiej rozumiane przez osoby je wdrażające? Uważam, że dla programisty jest to kwestia wyboru. Jeden wybiera MVC lub MVVM w zależności od tego, czy chce całkowitej abstrakcji o widoku z odrobiną narzutów (w przypadku MVVM).
Pankaj Upadhyay
@Pankaj Upadhyay: Który powinieneś użyć, zależy od twoich wymagań i wyboru technologii, a także od specyfiki twojej platformy.
Falcon
Uważam, że architektura MVC jest wystarczająco dobra na wszystko, ale może to być spowodowane tym, że nie napotkałem problemu, który szczególnie wymagałby MVVM. IMO, z pewnością musisz mieć kontrolę nad widokiem, ponieważ jego absolutna luźność zwiększy więcej błędów w przyszłych aktualizacjach
Pankaj Upadhyay
1
@Pankaj Upadhyay: Jeśli chcesz używać tej samej logiki dla różnych technologii interfejsu użytkownika, MVP jest lepszy. Nie sądzę, że koniecznie potrzebujesz trochę kontroli nad widokiem. Może być całkowicie niezależny i możesz również przetestować ViewModels - jeśli nie lepiej. Lepsza separacja przynosi również korzyści projektantom, ponieważ prace nad projektem można lepiej podzielić.
Falcon