Jaka jest różnica między wzorcem projektowym MVC, MVP i MVVM pod względem kodowania c#

Jeśli wyszukamy w Google wyrażenie "Jaka jest różnica między wzorcem projektowym MVC, MVP& MVVM", to możemy uzyskać kilka adresów URL, które omawiają różnicę między wzorcem projektowym MVC i MVVM teoretycznie tak jak:

MVP

Użyj w sytuacjach, w których powiązanie za pomocą datacontext 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 bezpośrednio wiązać się z prezenter, informacje muszą być przekazywane do widoku przez interfejs (IView).

MVVM

Użyj w sytuacjach, w których powiązanie za pomocą datacontext jest możliwe. Dlaczego? Różne interfejsy IView dla każdego widoku są usuwane, co oznacza mniej kodu do utrzymania. Niektóre przykłady, w których MVVM jest możliwe, obejmują projekty WPF i javascript wykorzystujące Knockout.

MVC

Używać w sytuacjach, w których połączenie między widokiem a resztą programu nie zawsze jest dostępne (i nie można skutecznie zatrudnić MVVM lub MVP). Opisuje to wyraźnie sytuację, w której web API jest oddzielony od danych wysyłanych do przeglądarek klienckich. Microsoft ' s ASP.NET MVC jest doskonałym narzędziem do zarządzania takimi sytuacjami i zapewnia bardzo przejrzysty framework MVC


Ale nie znalazłem ani jednego artykułu, który omawia różnicę teoretycznie wraz z przykładowym kodem.

Byłoby naprawdę miło, gdybym dostał artykuł, który omawia różnicę między tymi 3 wzorce projektowe (MVC, MVP & MVVM) wraz z kodem.

Chciałbym dostać w swoje ręce kod źródłowy 3 podobnych CRUD aplikacji, które zostały zaimplementowane przez te trzy wzorce projektowe (MVC, MVP & MVVM). Tak, że mogę przejść przez kod i zrozumieć, jak należy napisać kod dla tych trzech wzorców projektowych (MVC, MVP & MVVM).

Więc jeśli istnieje jakiś taki artykuł, który omawia jak kod będzie wyglądał inaczej dla tych 3 wzorców projektowych (MVC, MVP & MVVM) to proszę przekierować mnie do ten artykuł.

Author: Richie Thomas, 2013-10-18

4 answers

Ten powinien być dobrym starterem. W rzeczywistości wybrana "platforma" odgrywa również dużą rolę w sposobie korzystania z tych wzorców. Na przykład MVVM jest naturalnie dostosowany do WPF, podczas gdy MVP działa dobrze z formularzami Windows. ASP.Net MVC mówi sam za siebie.

 49
Author: David Osborne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 08:09:45

Niektóre podstawowe różnice można zapisać w skrócie:

MVC:

Tradycyjny MVC jest tam, gdzie jest

  1. Model: działa jako model dla danych
  2. widok: wyświetla widok dla użytkownika, który może być UI
  3. Controller: kontroluje interakcję między modelem a widokiem, gdzie view wywołuje kontroler do aktualizacji modelu. View może w razie potrzeby wywołać wiele kontrolerów.

MVP:

Podobny do tradycyjnego MVC, ale Kontroler zostaje zastąpiony przez prezenter. Ale prezenter, w przeciwieństwie do kontrolera, jest odpowiedzialny za zmianę widoku. Widok zwykle nie wywołuje prezentera.

MVVM

Różnica polega na obecności modelu widoku. Jest to swego rodzaju implementacja Observer Design Pattern, gdzie zmiany w modelu są również reprezentowane w widoku przez VM. Np: jeśli suwak zostanie zmieniony, nie tylko model zostanie zaktualizowany, ale dane, które mogą być tekstem, czyli wyświetlany w widoku jest również aktualizowany. Istnieje więc dwukierunkowe powiązanie danych.

 74
Author: Pritam Banerjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 12:17:04

Świetne Wyjaśnienie z linku: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Spójrzmy najpierw na MVC

Wejście jest skierowane najpierw do kontrolera, a nie do widoku. Dane wejściowe mogą pochodzić od użytkownika wchodzącego w interakcję ze stroną, ale mogą również pochodzić z prostego wprowadzenia określonego adresu url do przeglądarki. W obu przypadkach jest to kontroler, który jest połączony z uruchomieniem niektórych funkcji.

Istnieje wiele do jednego relacja między kontrolerem a widokiem. Dzieje się tak, ponieważ pojedynczy kontroler może wybrać różne widoki do renderowania w zależności od wykonywanej operacji.

Jest jedna strzałka z kontrolera do widoku. Dzieje się tak, ponieważ widok nie posiada żadnej wiedzy ani odniesienia do kontrolera.

Kontroler przekazuje Model z powrotem, więc istnieje wiedza między widokiem a oczekiwanym modelem, który jest do niego przekazywany, ale nie kontroler, który go obsługuje w górę.

MVP-Model View Presenter

Teraz spójrzmy na wzór MVP. Wygląda bardzo podobnie do MVC, z wyjątkiem kilku kluczowych rozróżnień:

Wejście zaczyna się od widoku, nie od prezentera.

Pomiędzy widokiem A powiązanym prezenterem jest mapowanie jeden do jednego.

Widok zawiera odniesienie do prezentera. Prezenter reaguje również na zdarzenia wyzwalane z widoku, więc jest świadomy widoku związanego z nim z.

Prezenter aktualizuje Widok na podstawie żądanych działań, które wykonuje w modelu, ale widok nie jest świadomy modelu.

MVVM-Model View View Model

Więc z wzorami MVC i MVP przed nami, spójrzmy na wzorzec MVVM i zobaczmy, jakie różnice w nim występują:

Wejście zaczyna się od widoku, a nie modelu widoku.

Podczas gdy Widok zawiera odniesienie do modelu widoku, Model widoku nie ma informacji o widoku. To jest dlaczego możliwe jest mapowanie jeden do wielu między różnymi widokami i jednym modelem widoku ... nawet w różnych technologiach. Na przykład Widok WPF i widok Silverlight mogą mieć ten sam Model widoku.

 27
Author: taha027,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-31 07:37:59

MVC, MVP, MVVM

MVC (old one)

MVP (bardziej modularny ze względu na niskie sprzężenie. Prezenter jest mediatorem między widokiem a modelem)

MVVM (masz już dwukierunkowe powiązanie między maszyną wirtualną a komponentem UI, więc jest bardziej zautomatyzowane niż MVP) Tutaj wpisz opis obrazka

Inny obrazek: Tutaj wpisz opis obrazka

 21
Author: Uddhav Gautam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 05:02:40