Użytkownik wchodzi w interakcję z widokiem , ale widok musi komunikować działania kontrolerowi . Kontroler może zaktualizować model , ale nie jest to konieczne z każdego / każdej zmianie.
Podany przeze mnie opis opiera się na moich osobistych doświadczeniach z implementacją MVC .NET. Twoja implementacja może być inna.
Controller gdzie działania są przetwarzane, w zasadzie warstwę biznesową. Prosty kontroler nie zrobi nic poza pobraniem danych z Modelu i przesłaniem ich do Widoku. Skomplikowany kontroler wykona wszelkiego rodzaju czynności, aż do zarządzania bezpieczeństwem, uwierzytelniania, autoryzacji, rejestracji i ewentualnie wielu innych rzeczy.
Zobacz powinien być odpowiedzialny za wyświetlanie informacji w sposób, że użytkownik może zrozumieć tylko. Może być tu trochę skrzyżowania zarówno z kontrolerem, jak i modelem, ponieważ takie rzeczy, jak aplikacje pojedynczej strony (SPA), będą zawierały informacje zwrotne dotyczące weryfikacji danych dla użytkownika. Wszelkie inne zwroty krzyżowe są bardzo rozczarowane.
Model wykorzystujący dane. Obejmuje to sprawdzanie poprawności danych (w stosownych przypadkach). W tej warstwie obsługiwane jest również przechowywanie i pobieranie danych.
AKTUALIZACJA
Wydaje się, że istnieje pewne zamieszanie wokół tego, kto co robi, kiedy. Dołączyłem dwa różne przeglądy architektur MVC, ponieważ są one podobne, ale nie takie same. Jest miejsce na każdą interpretację. Być może o wiele więcej. Powyższe opisy to moja interpretacja MVC z wielu źródeł, w tym z własnego doświadczenia w tworzeniu aplikacji przy użyciu tej metodologii. Mamy nadzieję, że ta aktualizacja pomoże rozwiązać niektóre z tych problemów.
MVC jest próbą zbudowania wzoru projektowego Separation of Concerns na potrzeby rozwoju oprogramowania. Zostało to przede wszystkim zaimplementowane w aplikacjach internetowych (o ile mi wiadomo).
View obsługuje wszystkie interakcje użytkownika. Jeśli użytkownik kliknie przycisk, widok określa, czy kliknięcie to interakcja interfejsu użytkownika, czy coś, co jest poza jego zasięgiem (interakcja kontrolera). Jeśli przycisk robi coś takiego jak kopiowanie wartości z jednego pola do drugiego, twoja implementacja określi, czy jest to problem z widokiem, czy problem z kontrolerem. Najprawdopodobniej będziesz miał tylko to zatarcie obaw w przypadku aplikacji jednostronicowej (SPA).
Kontroler jest gdzie twoje działania są przetwarzane. Widok poinformował użytkownika, że postanowił zmienić wartości dla niektórych pól. Administrator może przeprowadzić walidację tych danych lub może być obsługiwany przez Model. Znowu zależy to od implementacji. Jeśli kontroler ma funkcje zabezpieczeń, może stwierdzić, że użytkownik nie ma wystarczających uprawnień do wykonania akcji. Odrzuci zmiany i odpowiednio zaktualizuje widok. Kontroler określa również, jakie dane należy pobrać z modelu, jak go spakować i zaktualizować widok o te dane.
Modelu określa, jak i gdzie przechowywać dane. Może także przeprowadzić weryfikację tych danych przed ich zapisaniem (powinno to zrobić, ponieważ ludzie czasami omijają widok).
Wikipedia ma artykuł na temat MVC .
- Modelu powiadamia z towarzyszącym mu widok / widoki i kontrolery gdy nastąpiła zmiana w jego stanie. To powiadomienie pozwala widokom na aktualizację ich prezentacji, a kontrolery na zmianę dostępnego zestawu poleceń. W niektórych przypadkach implementacja MVC może zamiast tego być „pasywna”, więc inne komponenty muszą sondować model w poszukiwaniu aktualizacji, a nie otrzymywać powiadomień.
- Widok jest opowiedziana przez kontroler wszystkich informacji niezbędnych do generowania reprezentacji wyjściowy dla użytkownika. Może również zapewniać ogólne mechanizmy informowania kontrolera o danych wejściowych użytkownika.
- Kontroler może wysyłać polecenia do modelu zaktualizować stan modelki (np edycji dokumentu). Może także wysyłać polecenia do powiązanego widoku, aby zmienić prezentację modelu w widoku (np. Przewijając dokument).
Z przeglądu MVC firmy Microsoft .
Modele Obiekty modelu to części aplikacji, które implementują logikę dla domeny danych aplikacji. Często obiekty modelu pobierają i przechowują stan modelu w bazie danych. Na przykład obiekt Product może pobierać informacje z bazy danych, działać na niej, a następnie zapisywać zaktualizowane informacje z powrotem do tabeli Products w bazie danych SQL Server.
W małych aplikacjach model jest często separacją konceptualną zamiast fizyczną. Na przykład, jeśli aplikacja odczytuje tylko zestaw danych i wysyła go do widoku, aplikacja nie ma warstwy modelu fizycznego i powiązanych klas. W takim przypadku zestaw danych przyjmuje rolę obiektu modelowego.
Wyświetlenia. Widoki są komponentami wyświetlającymi interfejs użytkownika aplikacji (UI). Zazwyczaj ten interfejs użytkownika jest tworzony z danych modelu. Przykładem może być widok edycji tabeli Produkty, która wyświetla pola tekstowe, listy rozwijane i pola wyboru w oparciu o bieżący stan obiektu Produkt.
Kontrolery Kontrolery to komponenty, które obsługują interakcję użytkownika, pracują z modelem i ostatecznie wybierają widok do renderowania, który wyświetla interfejs użytkownika. W aplikacji MVC widok wyświetla tylko informacje; kontroler obsługuje i reaguje na dane wejściowe i interakcje użytkownika. Na przykład kontroler obsługuje wartości ciągu zapytania i przekazuje te wartości do modelu, który z kolei może użyć tych wartości do wysłania zapytania do bazy danych.