MVVM czy MVC? Chcesz użyć tego samego zestawu klas dla WPF i ASP.NET

11

Jestem nowicjuszem pod względem Wzorów Projektowych. Właśnie zacząłem uczyć się MVC, kiedy słyszę nowy szum, MVVM.

Chcę poznać wgląd w oba te elementy, przeprojektowując starą aplikację do inwentaryzacji i fakturowania opracowaną dla klienta. Chcę napisać zarówno aplikację WPF dla systemu Windows, jak i wersję internetową. Chcę użyć tego samego zestawu klas, jeśli to możliwe, jeśli nie, to przynajmniej z niewielką modyfikacją.

Przeczytałem kilka artykułów, ale nie podążam za architekturą i omówionymi tam wysokopoziomowymi koncepcjami .NET 3.5 i 4. Chcę krok po kroku, projektując tylko to, czego naprawdę potrzebuję w moim prawdziwym projekcie.

Czy jest jakieś proste odniesienie do MVVM? Czy MVVM jest supersetem czy podzbiorem MVC? Który wzór jest nowoczesny i który powinienem wybrać dla wersji aplikacji Windows i Web?

Są pewne klasy, które rzadko muszę łączyć z Widokiem. W takim przypadku zaprojektowanie tej samej klasy w sposób MVVM okaże się dodatkową pracą.

RPK
źródło

Odpowiedzi:

11

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 Viewpotrzebuje nieruchomości, ViewModelmusi 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.

Sokół
źródło
4

Z powodu problemów związanych z cyklem życia i konieczności zachowania stanu między postami na stronach bardzo trudno będzie ponownie użyć 100% kodu interfejsu użytkownika none między Internetem a WPF. Asp.net nie ma potężnego powiązania danych, które jest potrzebne dla MVVM, a także wiele logiki musi być uruchomionych w jscript, ponieważ ludzie oczekują, że interfejs użytkownika zaktualizuje się samo bez potrzeby postback.

Gdybyś mógł użyć SilverLight, twoje życie byłoby o wiele mniej skomplikowane :-)

Podobnie, czy możesz obsługiwać przeglądarkę internetową w swojej aplikacji WPF dla typowych bitów interfejsu użytkownika?

Ian
źródło
Jakie korzyści mogę uzyskać dzięki SilverLight?
RPK,
1
@PRK, Silverlight pozwoli ci zrobić wszystko, co robi WPF, a jeśli możesz zmusić wszystkich użytkowników „sieci” do zainstalowania go, pozwoli ci również stworzyć rozwiązanie, do którego można uzyskać dostęp, zmieniając sieć i „czując się jak aplikacja internetowa”.
Ian
4

Twój zamiar użycia tych samych klas dla interfejsu użytkownika opartego na ASP.Net i WPF nie jest zbyt praktyczny. Wiązanie danych i korzystanie z javascript w sieci jest bardzo różne od WPF. Jedyną opcją, jaką mogę wymyślić, jest MVP z całkowicie pasywnym widokiem . Teoretycznie możesz mieć tego samego prezentera, który zapełnia stronę WWW i WPF.
W praktyce opracuję architekturę, w której większość reguł biznesowych znajduje się w warstwie usług internetowych i dwóch różnych poziomach prezentacji z możliwie najmniejszymi regułami biznesowymi, które mówią o tej usłudze internetowej.

softveda
źródło