Model-Widok-Kontroler jest wzorcem projektowym w informatyce, który ma na zadanie podzielić aplikację na trzy warstwy (czasami w odniesieniu do modelu MVC stosuje się nazwę modelu trójwarstwowego): logikę biznesową (czyli jak i gdzie są przechowywane dane, kto ma do nich dostęp, jak dane są przetwarzane) zwaną modelem, logikę prezentacji (jak dane pochodzące z modelu mają zostać wyświetlone użytkownikowi) zwaną widokiem oraz logiką sterującą całym programem zwaną kontrolerem. Dzięki takiemu podziałowi aplikacji modyfikacje jednego komponentu minimalnie wpływa na zmiany w pozostałych dwóch komponentach.
Wzorzec MVC nie jest nową ideą. Wymyślony został w laboratorium firmy Xerox w latach 70. W 1979 roku Trygve Reenskaug opisał jako pierwszy idee MVC. Został on wykorzystany do stworzenia interfejsu użytkownika dla języka Smalltalk, również stworzonego przez firmę Xerox. Pierwszą książką o MVC opisująca implementację MVC również dotyczyła interfejsu języka Smalltalk - Applications Programming in Smalltalk-80: How to use Model-View-Controller napisana przez Steve Burbeck.
Firma Sun na potrzeby swojego języka programowania Java jako pierwsza zastosowała wzorzec Model-Widok-Kontoler do aplikacji internetowych, gdzie obecnie MVC jest bardzo popularne. Powstała niezliczona ilość frameworków wykorzystujących MVC praktycznie w każdym popularnym obecnie języku programowania.
Model jest najniżej położoną warstwą modelu MVC. Jest odpowiedzialna za tak zwaną logikę biznesową aplikacji, czyli funkcjonalność związana z przechowywaniem danych aplikacji. Model jako jedyna część aplikacji powinna przechowywać dane w sposób trwały. Sposób przechowywania danych jest zupełnie obojętny, może to być baza danych, zwykły plik tekstowy, plik XML, WebServices, itd. Najważniejszą rzeczą jest, aby model ukrywał sposób implementacji przechowywania danych przed resztą aplikacji. Model powinien dostarczać pozostałym komponentom spójnego interfejsu do przetwarzania danych jednocześnie ukrywając implementacje – np. zapytanie języka SQL do bazy danych.
Dobrym sposobem implementacji modelu jest stworzenie oddzielnej klasy dla każdego logicznego obiektu aplikacji, np. użytkownik, książka, artykuł. Takie klasy mogą wykorzystywać wzorzec Singleton oraz powinna udostępniać metody pozwalające na wykonanie wszystkich operacji związanych z danymi, wymagane przez pozostałe elementy aplikacji. Najczęściej model wykorzystuje do przechowywania danych bazę danych. Wtedy często obiekty modelu odpowiadają pojedynczej tabeli w bazie danych lub grupie ściśle powiązanych ze sobą tabel. Jeśli wystąpi konieczność zmiany w jednej z tabel w bazie, zmiany ograniczają się na ogół wyłącznie do modelu, a dokładniej do jednej klasy modelu.
Dobrze zaprojektowany model powinien być odporny na wewnętrzne zmiany, czyli zmiany w strukturze danych nie powinny wpływać na zmiany w interfejsie, z którego korzystają pozostałe elementy aplikacji. Również dobrze zaprojektowany model powinien być przenośny. Jeśli posiadamy klasy odpowiedzialne za określone funkcjonalności (np. autoryzacja użytkowników w systemie) powinny one być możliwe w łatwy sposób do przeniesienia do nowej aplikacji przez proste przeniesienie klas lub całej biblioteki odpowiedzialnej za to.
Widok jest tą częścią wzorca Model-Widok-Kontroler odpowiedzialną za wyświetlanie danych użytkownikowi, inaczej widok odpowiada za prezentację. W przypadku aplikacji internetowych najczęstszym wykorzystywanym formatem wyjściowym jest HTML ale widok nie musi się ograniczać tylko do niego. Widokiem może być Windows Forms (w aplikacja desktopowych), XML, obrazki, PDF oraz w wielu innych formatach.
Widok wykorzystuje model do pobrania danych, które następnie wyświetla dla użytkownika. Kategorycznie widok nie powinien zmieniać danych dostarczanych do niego w celu wyświetlenia. Widok w żaden sposób nie powinien zmieniać stanu aplikacji. Widok ma na zadanie oddzielenie logiki prezentacji od logiki biznesowej aplikacji.
Widok może być implementowanych w postaci klas, po jednej dla strony WWW, dla dokumentu PDF, dla plik XML. W dobrze zaprojektowanej aplikacji widok jest wymienny, zmiana formatu wyświetlania danych (np. z HTML do PDF) jest wykonywany tylko przez zamianę klasy implementującą inny sposób wyświetlania danych. Obecnie ma to coraz większe znaczenie, ponieważ coraz częściej wymaga się, aby aplikacja obsługiwała różne formaty zapisu danych wyjściowych.
Ostatnią z części wzorca MVC jest kontroler. Kontroler jest sercem całej aplikacji wykonanej za pomocą wzorca Model-Widok-Kontroler. Na podstawie żądania wykonania czynności przez użytkownika, kontroler decyduje, jakie dane mają być pobrane z modelu oraz w jaki, widok ma te dane wyświetlić. Kontroler akceptuje żądanie od użytkownika, następnie instruuje model oraz widok w celu wykonania akcji na podstawie danych wejściowych od użytkownika. W efekcie kontroler mapuje żądania wykonania akcji przez użytkownika na odpowiedz aplikacji. Przykładowo jeśli użytkownik kliknie na element interfejsu lub wybierze pozycję w menu, kontroler jest odpowiedzialny za określenie sposobu reakcji aplikacji.
Ogólny przebieg działania aplikacji webowej napisanej z wykorzystaniem wzorca projektowego Model-Widok-Kontroler przebiega następująco(rysunek poniżej):
- Użytkownik komunikuje się z aplikacją za pomocą interfejsu użytkownika, wykonuje jakoś czynność np. kliknięcie myszką
- Kontroler przechwytuje żądanie wykonania akcji od interfejsu użytkownika
- Kontroler tworzy instancje odpowiednich obiektów z modelu w celu obsługi żądania, ewentualnie zmienia stan obiektów modelu
- Kontroler następnie inicjuje odpowiedni widok w celu prezentacji pobranych z modelu danych.
- Widok na podstawie obiektów z modelu wyświetla dane dla użytkownika i czeka na kolejną reakcję użytkownika, która powoduje rozpoczęcie cyklu od nowa.

Na rysunku proces przetwarzania żądania według wzorca MVC dla aplikacji internetowej.
Tags: mvc,
wzorzec projektowy,
model,
widok,
kontroler
Categories: Techniczne
47075928-4e6d-4284-b254-91bc8efddb04|3|5.0