MVC logo

MVC

MVC (Model-view-controller) jest tzw. wzorcem projektowym, stosowanym przy tworzeniu nowoczesnych systemów informatycznych.

Główną koncepcją MVC jest wymuszenie podziału aplikacji na 3 niezależne warstwy reprezentujące kolejno:

  • (Model) Model danych - opis struktur danych i powiązań pomiędzy nimi
  • (View) Interfejs, czyli to co widzi użytkownik
  • (Controller) Logika działania - powiązania między zdarzeniami zachodzącymi w systemie

Podział na warstwy służy uporządkowaniu architektury systemu. Dzięki temu, że każda logiczna część jest od siebie oddzielona, zmiana w jednym miejscu, nie powoduje konieczności wykonywania lawinowej ilości zmian w innych miejscach systemu.

Mimo, że istnieje wiele frameworków wspierających MVC w innych technologiach, J2EE wiedzie zdecydowany prym jeżeli chodzi o ilość sprawdzonych narzędzi zapewniających implementację oprogramowania zgodnego z wzorcem MVC. Do najbardziej popularnych należą: JSF, Spring oraz Struts.

MODEL

Model jest komputerową reprezentacją rozpatrywanego problemu. Definiuje elementy, ich atrybuty i powiązania między nimi. Przykładowo, w aplikacji internetowej obsługującej sprzedaż biletów, model może określać reprezentację pojęć takich jak: bilet, wydarzenie, klient.

WIDOK

Widok to część aplikacji odpowiedzialna za prezentację danych. Widoki mogą pobierać odpowiednie dane z modelu, lub modyfikować je. W odniesieniu do poprzedniego przykładu, w aplikacji rezerwującej bilety, widokiem może być strona WWW z formularzem rejestracyjnym dla klienta.

KONTROLER

Rolą kontrolerów jest sterowanie aplikacją i komunikacja z użytkownikiem. Kontroler zwykle pośredniczy między przesyłem danych pomiędzy modelem, a widokiem. Kontroler odbierając informacje od użytkownika może zdecydować o dalszym działaniu aplikacji: wyświetlić widok, zmienić stan modelu, lub przesłać sterowanie do innego kontrolera.

Konsekwencje użycia

Zalety

  • Niezależność modelu - model nie jest zależny od widoku i aplikacja może posiadać wiele niezależnych widoków dla tego samego modelu
  • Duża elastyczność widoków - ze względu na na oddzielenie widoku od modelu, widoki mogą być modyfikowane częściej i niższym kosztem. Jest to szczególnie istotne, ponieważ w życiu systemu interfejs i warstwa prezentacji zmieniają się częściej niż logika biznesowa aplikacji

Wady

  • Złożoność - architektura MVC nanosi dodatkową warstwę abstrakcji i nowe sposoby interakcji, co prowadzi do wzrostu jej złożoności. Zależność widoków od modeli i dodatkowa logika widoków czyni je szczególnie skomplikowane w testowaniu.
  • Mała elastyczność modelu - modyfikacja modelu może w konsekwencji wymagać modyfikacji wielu widoków operujących na tym modelu (ponieważ model jest niezależny od widoku, ale widok zawsze opiera się na modelu)

Przydatne linki