Czy jest jakieś proste odniesienie do MVVM?
Tak jest. Spójrz tutaj.
Czy MVVM jest supersetem czy podzbiorem MVC?
MVVM należy do rodziny MVC, więc jeśli można tak powiedzieć, jest to podzbiór. Jest to wariant oddzielenia interfejsu użytkownika od logiki biznesowej poniżej. Opisałbym to jako rodzeństwo MVC. Od pierwszych dni OOP ludzie szukają sposobów na oddzielenie interfejsu użytkownika od ich logiki. MVC był pierwszym ewolucyjnym archetypem. Jest to dość proste, chociaż większość ludzi nie rozumie tego dobrze. Widok jest tylko obserwatorem modelu i wywołuje go w razie potrzeby. Kontroler jest tylko strategią dla widoku do komunikacji z modelem, na przykład gdy potrzebujesz zachowania wymiennego (np. ReadonlyController, AdminController). MVC odnosi duże sukcesy i naprawdę dobrą praktyką jest jego stosowanie.
MVVM jest specjalistycznym rodzajem Wzoru MVP, opisanym przez Martina Fowlera . MVP stara się utrzymać widok tak głupi, jak to możliwe (wciąż przyjmując dane wejściowe użytkownika itp.), Zwiększając w ten sposób testowalność. Ma na celu abstrakcję widoku i logikę interakcji, która ma zostać wprowadzona do prezentera. Prezenter komunikuje się wyłącznie z logiką modelu / biznesu i aktualizuje widok. Martin Fowler opisuje MVVM w swoim Modelu prezentacji.
Widok jest całkowicie abstrakcyjny do ViewModel. Kiedy View
potrzebuje nieruchomości, ViewModel
musi ją również mieć. To (ViewModel) ma być całkowicie niezależne od podstawowej technologii interfejsu użytkownika, abstrakcja. Aby komunikować się między View a ViewModel, należy zastosować wzorzec synchronizacji (tj. Observer). Nie jest to łatwe do osiągnięcia w bezstanowym środowisku internetowym. MVVM różni się od MVP, ponieważ widok nie wiąże się już z modelami / logiką biznesową, ale zamiast ViewModel.
Który wzór jest nowoczesny i który powinienem wybrać dla wersji aplikacji Windows i Web?
Model prezentacji (podobny do MVVM) w teorii powinien być całkowicie niezależny od używanej technologii interfejsu użytkownika. Należy jednak uwzględnić aspekt synchronizacji. Można to łatwo zrobić, łącząc się z poleceniami i właściwościami za pomocą WPF, gdzie klej synchronizacyjny jest już obecny. W przypadku ASP.NET jest to inna historia. Istnieje jednak artykuł na temat CodeProject, który wykorzystywał wzorzec modelu prezentacji ze wszystkimi technologiami interfejsu Windows. Spójrz.