Niedawno dowiedziałem się o wzorcu projektowym MVC. Uczę się z książki Wzorzec pierwszego projektu.
Zgodnie z tą książką (jeśli dobrze rozumiem):
Model to większość logiki i danych aplikacji.
Widok jest w zasadzie GUI, który reprezentuje model wizualnie dla użytkownika.
Administrator jest odpowiedzialny za „mediację” i działanie jako „pośrednik” między Widokiem a Modelem. Widok informuje kontroler, że użytkownik wykonał akcję, a kontroler tłumaczy to na wywołania metod w modelu.
Jednak wiele miejsc w Internecie jest sprzecznych z tym, co rozumiem z tej książki. Twierdzą, że ogólnie użytkownik wchodzi w interakcje z kontrolerem, a nie z widokiem.
Który z nich jest prawdziwy czy powszechniejszy? Czy użytkownik wchodzi w interakcję bezpośrednio z kontrolerem, czy bezpośrednio z widokiem? Czy oba podejścia są dopuszczalne? Który jest bardziej powszechny?
źródło
Odpowiedzi:
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 .
Z przeglądu MVC firmy Microsoft .
źródło
url-routes
, umieszczony wController
. Mam na myśli brak widoku ...Użytkownik wchodzi w interakcję z kontrolerem . Z technicznego punktu widzenia nie wchodzisz w interakcję z widokiem , po prostu używasz go do interakcji z kontrolerem .
Na pierwszy rzut oka wydaje się, że użytkownik wchodzi w interakcję z graficznym interfejsem użytkownika - również dla osób niebędących programistami ma to większy sens, jednak klikając przycisk, w zasadzie rozmawiasz z kontrolerem, a nie z widokiem .
Również nie wszystkie aplikacje - nawet aplikacje internetowe MVC, mają GUI. Możesz wchodzić w interakcje z kontrolerem za pośrednictwem interfejsu API - po prostu prosty,
url-routes
na przykład umieszczony w samym kontrolerze .Kontroler powinien być miejscem, które odbiera i Uchwyty żądania użytkownika. Więc jeśli w jakiś sposób uzyskujesz dostęp do Modelu bezpośrednio z widoku - nie ważne jak, to nie jest już MVC .
źródło
Użyjmy konkretnego przykładu, dlaczego użytkownicy wchodzą w interakcje bezpośrednio z widokami, a nie z kontrolerami.
W aplikacji muzycznej na iPhonie funkcją wysokiego poziomu jest odtwarzanie listy odtwarzania. „Odtwórz listę odtwarzania” to funkcja kontrolera aplikacji.
Istnieje więcej niż jeden sposób aktywacji tej funkcji. Mogę kliknąć listę odtwarzania w aplikacji lub poprosić Siri (interfejs głosowy) o wykonanie tej samej funkcji. Są to dwa różne gesty rozpoznawane przez różne poglądy.
Informacje zwrotne w każdym widoku są również inne. Siri powie ci, że odtwarza żądaną muzykę. Aplikacja muzyczna wyświetli wizualną informację zwrotną na temat odtwarzania listy odtwarzania.
źródło