Wzorzec projektowy MVC

Czym są wzorce projektowe?

Wzorce projektowe to uniwersalne rozwiązania mające zastosowania do powtarzalnych problemów. Początkowo stworzone z myślą o różnych dziedzinach związanych z projektowaniem (m.in. architekturze), znajdują najczęstsze zastosowanie w programowaniu.

MVC

MVC jest jednym z najczęściej stosowanych wzorców projektowych w informatyce. Jego idee można zrozumieć rozszyfrowując nazwę: Model-View-Controller (Model-Widok-Kontroler). Głównym założeniem tego wzorca jest podzielenie kodu aplikacji na 3 moduły:

  • Model reprezentujący dane (np. pobierane z bazy danych czy parsowane z plików XML)
  • Widok reprezentujący interfejs użytkownika
  • Kontroler czyli logikę sterującą aplikacją

Czemu może służyć taki podział? Przyjrzyjmy się tym elementom bliżej.

Model

Model zapewnia zunifikowany sposób dostępu do danych. Najczęściej stosowany jest do pobierania i przygotowania rekordów z bazy danych. Dzięki temu reszta aplikacji staje się niezależna od tego skąd i w jaki sposób pobierane są dane. Kontroler (czyli nasza logika) nie musi wiedzieć czy pobieramy dane z bazy (a jeśli tak jest to nie musi wiedzieć czy korzystamy np. z MySQL czy PostgreSQL) czy np. z pliku. Pisząc logikę aplikacji wywołujemy tylko odpowiednie funkcje modelu i w wyniku dostajemy dane do przetworzenia. W połowie tworzenia programu/strony typ i format składowania danych może się zmienić ale będzie to wymagać zmiany kodu tylko modelu. Model jest opcjonalny gdyż nie zawsze korzystamy z danych pobieranych z bazy czy plików.

Widok

Widok reprezentuje to co widzi użytkownik. Znowu powstaje pytanie: dlaczego nie zawrzeć tego w kodzie aplikacji? Widok oddzielony od logiki pozwala na bezinwazyjną zmianę grafiki w dowolnym momencie. Kontroler musi jedynie wiedzieć w jaki sposób przekazać dane do widoku. Osoba wykonująca widok nie musi wiedzieć praktycznie nic o logice programu gdyż dostaje tylko dane, które trzeba sformatować. Należy również podkreślić, że – tak jak w przypadku modelu – widok może się zmienić w każdej chwili nie ingerując w kod programu. Widok może być zminimalizowany (np. do linii poleceń).

Kontroler

Kontroler jest podstawową jednostką logiczną naszego programu. To tutaj znajduje się najważniejsza część kodu. Kontroler odpowiada m.in. za przetwarzanie danych pobranych za pomocą modelu i przekazanie ich użytkownikowi oraz zapisanie danych przez niego podanych (poprzez widok). W kontrolerze odbywają się wszystkie konieczne obliczenia i podejmowane są odpowiednie akcje w zależności od działań użytkownika. Krótko mówiąc kontroler zajmuje się sterowaniem całą aplikacją i jest jej najważniejszym elementem.

Czy ma to zastosowanie w praktyce?

Wielu programistów ma bardzo odmienne zdania na temat potrzeby stosowania MVC. Dla niektórych fizyczny podział kodu programu jest niewygodny bo lubią „mieć wszystko pod ręką". Jednak taki podział może zapobiec tworzeniu się bałaganu, szczególnie przy tworzeniu dużych aplikacji. Korzystanie z MVC daje nam od razu gotową strukturę aplikacji co pozwala na szybsze przystąpienie do kodowania. Fizyczny podział kodu pozwala też na uniknięcie problemów ze znalezieniem jakiejś funkcjonalności.

Kolejnym plusem jest możliwość jasnego podziału prac na projektem. Programista kontrolera nie musi wiedzieć jak wygląda kod modelu pod warunkiem, że wie co robią poszczególne udostępnione mu metody, nie musi także wiedzieć jak będą wyglądały dane wyświetlane przez widok.

Gdzie się stosuje

MVC najczęściej stosowane jest przy tworzeniu dynamicznie generowanych aplikacji internetowych. Przy wykorzystaniu MVC zmiana bazy danych nie spędza już snu z powiek programistów. Cały kod SQL znajduje się w jednym miejscu dlatego wprowadzenie zmian nie zajmuje tyle czasu i nie wpływa na reszte kodu aplikacji. Identycznie jest z widokiem co jest szczególnie przydatne gdyż layout'y stron często się zmieniają.

Aby nie pisać wszystkiego od początku powstało wiele framework'ów wspomagających programowanie i udostępniających gotową architekturę opartą na MVC. Do najpopularniejszych napisanych w PHP należą Code Igniter, Zend Framework oraz CakePHP. Koniecznie należy też wspomnieć Ruby on Rails, który przyczynił się zarówno do rozpopularyzowania MVC jak i języka Ruby. Programiści Perla mają do dyspozycji Catalyst, a Pythona – Pylons.

Z powodu jego przydatności jest to prawdopodobnie najczęściej wykorzystywany wzorzec projektowy.

Wzorzec projektowy MVC

Informator internetowy - programowanie