Jeśli przeszukamy Google za pomocą wyrażenia „Jaka jest różnica między wzorcem projektowym MVC, MVP i MVVM”, możemy uzyskać kilka adresów URL omawiających różnicę między wzorcem projektowym MVC MVP i MVVM teoretycznie :
MVP
Użyj w sytuacjach, w których powiązanie za pomocą tekstu danych nie jest możliwe. Windows Forms jest tego doskonałym przykładem. Aby oddzielić widok od modelu, potrzebny jest prezenter. Ponieważ widok nie może być bezpośrednio powiązany z prezenterem, informacje muszą zostać przekazane do widoku przez interfejs (IView).
MVVM
Użyj w sytuacjach, w których możliwe jest wiązanie za pomocą tekstu danych. Czemu? Różne interfejsy IView dla każdego widoku są usuwane, co oznacza mniej kodu do utrzymania. Niektóre przykłady, w których możliwy jest MVVM, obejmują projekty WPF i JavaScript w Knockout.
MVC
Używaj w sytuacjach, gdy połączenie między widokiem a resztą programu nie zawsze jest dostępne (i nie możesz skutecznie zastosować MVVM lub MVP). To wyraźnie opisuje sytuację, w której interfejs API sieci Web jest oddzielony od danych wysyłanych do przeglądarek klienta. Microsoft ASP.NET MVC firmy Microsoft jest doskonałym narzędziem do zarządzania takimi sytuacjami i zapewnia bardzo przejrzystą strukturę MVC
Ale nie znalazłem ani jednego artykułu, który teoretycznie omawia różnicę wraz z przykładowym kodem.
Byłoby naprawdę miło, gdybym dostał artykuł omawiający różnicę między tymi 3 wzorami projektowymi (MVC, MVP i MVVM) wraz z kodem.
Chciałbym zdobyć kod 3 podobnych aplikacji CRUD, które zostały zaimplementowane przez te trzy wzorce projektowe (MVC, MVP i MVVM). Żebym mógł przejść przez kod i zrozumieć, jak należy napisać kod dla tych trzech wzorców projektowych (MVC, MVP i MVVM).
Więc jeśli istnieje taki artykuł, który omawia, jak kod wyglądałby inaczej dla tych 3 wzorców projektowych (MVC, MVP i MVVM), to proszę przekieruj mnie do tego artykułu.
Odpowiedzi:
Kilka podstawowych różnic można napisać w skrócie:
MVC:
Tam gdzie jest tradycyjny MVC
MVP:
Podobne do tradycyjnego MVC, ale kontroler został zastąpiony przez prezentera. Ale Prezenter, w przeciwieństwie do Kontrolera, jest również odpowiedzialny za zmianę widoku. Widok zwykle nie wywołuje prezentera.
MVVM
Różnica polega tutaj na obecności View Model. Jest to rodzaj implementacji wzorca projektowania obserwatora, w którym zmiany w modelu są również reprezentowane w widoku przez maszynę wirtualną. Np .: W przypadku zmiany suwaka aktualizowany jest nie tylko model, ale również dane, które mogą być tekstem wyświetlanym w widoku. Istnieje więc dwukierunkowe wiązanie danych.
źródło
MVC, MVP, MVVM
MVC (stary)
MVP (bardziej modułowy ze względu na niskie sprzężenie. Prezenter jest pośrednikiem między View a Model)
MVVM (Masz już dwukierunkowe wiązanie między VM a komponentem interfejsu użytkownika, więc jest bardziej zautomatyzowane niż MVP)
Kolejny obraz:
źródło
Świetne wyjaśnienie z linku: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Spójrzmy najpierw na MVC
Wejście jest najpierw kierowane do kontrolera, a nie do widoku. Dane wejściowe mogą pochodzić od użytkownika wchodzącego w interakcję ze stroną, ale mogą też pochodzić z wpisania określonego adresu URL w przeglądarce. W obu przypadkach jest to kontroler, który jest połączony z niektórymi funkcjami.
Istnieje relacja typu jeden do jednego między kontrolerem a widokiem. Jest tak, ponieważ pojedynczy kontroler może wybrać różne widoki do renderowania w zależności od wykonywanej operacji.
Istnieje jedna strzałka w jedną stronę od kontrolera do widoku. Wynika to z faktu, że widok nie ma żadnej wiedzy ani odniesienia do kontrolera.
Kontroler przekazuje model z powrotem, więc istnieje wiedza między widokiem a oczekiwanym modelem przekazywanym do niego, ale nie kontroler go obsługuje.
MVP - Model View Presenter
Teraz spójrzmy na wzór MVP. Wygląda bardzo podobnie do MVC, z wyjątkiem kilku kluczowych różnic:
Wejście zaczyna się od Widoku, a nie Prezentera.
Pomiędzy widokiem i powiązanym prezenterem istnieje mapowanie jeden na jeden.
Widok zawiera odniesienie do Prezentera. Prezenter reaguje również na zdarzenia wyzwalane z Widoku, więc jest świadomy Widoku, z którym jest powiązany.
Prezenter aktualizuje widok na podstawie żądanych działań, które wykonuje na modelu, ale widok nie obsługuje modelu.
MVVM - widok modelu Widok modelu
Więc z wzorami MVC i MVP przed nami, spójrzmy na wzór MVVM i zobaczmy, jakie różnice:
Dane wejściowe zaczynają się od Widoku, a nie Widoku Modelu.
Podczas gdy widok zawiera odniesienie do modelu widoku, model widoku nie ma informacji o widoku. Dlatego możliwe jest mapowanie jeden na wielu między różnymi widokami i jednym modelem widoku… nawet w różnych technologiach. Na przykład widok WPF i widok Silverlight mogą współdzielić ten sam model widoku.
źródło
Zdjęcie poniżej pochodzi z artykułu Erwina van der Valk:
W artykule wyjaśniono różnice i podano przykłady kodu w języku C #
źródło