Podręcznik
4. Wzorce projektowe
4.2. MVC - Model View Controller
Model-View-Controller (MVC) to popularny wzorzec projektowy stosowany w budowie aplikacji internetowych, który ma na celu oddzielenie logiki biznesowej od logiki prezentacji i zarządzania interakcjami użytkownika. Wzorzec MVC dzieli kod źródłowy aplikacji na trzy zasadnicze warstwy: model (M - Model), widok (V - View), kontroler (C - Controller).
Model
Widok
Jest odpowiedzialny za prezentację danych, czyli za to, co użytkownik widzi na ekranie. Widok generuje interfejs użytkownika i wyświetla dane dostarczane przez Model w sposób zrozumiały dla użytkownika, np. poprzez wygenerowanie odpowiednio sformatowanej strony w języku HTML bądź jej części w postaci poszczególnych komponentów (np. listy zalogowanych użytkowników). Jego rola nie obejmuje natomiast zarządzania logiką aplikacji ani operacjami na danych.
Kontroler
Przykład
- Klient (przeglądarka internetowa) wysyła do serwera żądanie (np. w wyniku kliknięcia w link lub przesłanie formularza) do serwera.
- Kontroler odbiera żądanie, interpretuje je i decyduje, jakie operacje muszą być wykonane, aby odpowiedzieć na żądanie użytkownika. Na przykład, jeśli użytkownik chce zobaczyć listę produktów, Kontroler wywoła na odpowiednim Modelu metodę, która zwróci niezbędne dane.
- Model pobiera dane z odpowiedniej tabeli z bazy, wykonuje operacje biznesowe (np. obliczenia, przetwarzanie danych, agregację z różnych tabel itp.). Alternatywnie, w przypadku zapisu, dostarczone dane weryfikuje (np. sprawdza, czy wartości mieszczą się w zakresie wynikającym z logiki aplikacji), a następnie zapisuje we właściwe miejsce w bazie. Operacje przetwarzania danych czasami bywają skomplikowane, ale nie mogą obejmować formatowania pod konkretny sposób prezentacji.
- Po poprawnym wykonaniu operacji, Model zwraca do Kontrolera pobrane dane. W przypadku wystąpienia błędu (np. żądanie nieistniejącego rekordu lub dostarczenie danych niespełniających kryteriów walidacji), model sygnalizuje błąd - np. poprzez wykorzystanie mechanizmu wyjątków (ang. Exceptions).
- Kontroler wybiera Widok, który pozwala wyświetlić dane (lub komunikat błędu), i przekazuje do niego dane przekazane przez Model.
- Widok renderuje dane dostarczone przez Kontroler, generując najczęściej kod HTML, który jest wyświetlany użytkownikowi w przeglądarce.
Zalety
- Rozdzielenie odpowiedzialności. Dzięki MVC, kod aplikacji jest podzielony na trzy główne części, które są odpowiedzialne za różne aspekty działania aplikacji – Model za logikę i dane, View za prezentację, a Controller za obsługę interakcji. Dzięki temu każda z tych części może być rozwijana, testowana i utrzymywana niezależnie od siebie - przez różne zespoły programistów.
- Dzięki wyraźnemu rozdzieleniu odpowiedzialności, aplikacja jest łatwiejsza w utrzymaniu - zmiany w jednym komponencie (np. w definicji wyglądu) nie wpływają bezpośrednio na inne części systemu (np. na logikę biznesową zaimplementowaną w Modelu).
- Takie odseparowane komponenty aplikacji mogą być ponownie używane w innych częściach aplikacji lub nawet w innych projektach, co przyspiesza rozwój i zmniejsza wymagany nakład pracy.
- Rozdzielenie logiki biznesowej od logiki prezentacji pozwala na dużo łatwiejsze testowanie Modelu i Kontrolera, np. bez konieczności uruchamiania interfejsu użytkownika.
- MVC pozwala na łatwe skalowanie poprzez dodawanie nowych funkcjonalności bez konieczności analizowania i modyfikowania całego kodu źródłowego aplikacji.