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ł.
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.
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
- Model: działa jako model dla danych
- widok: wyświetla widok dla użytkownika, który może być UI
- 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.
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.
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)
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