Model View Controller
Spis treści
Charakterystyka
Wzorzec MVC (Model View Controller - Model Widok Kontroler) jest sposobem na oddzielenie poszczególnych części aplikacji. Definiuje on trzy podstawowe elementy aplikacji, które są od siebie niezależne i pozwalają na dużą elastyczność.
Założenia
Wzorzec MVC pozwala na:
- oddzielenie od siebie logiki biznesowej, logiki prezentacyjnej oraz sterowania aplikację,
- duża elastyczność podczas budowania, użytkowania i rozszerzania aplikacji
Elementy MVC
Model
Model jest odpowiedzialny za tzw. logikę biznesową. W uproszczeniu model jest odpowiedzialny za przechowywanie danych. Udostępnia on spójny interfejs i ukrywa właściwą implementację, więc obiekt używający modelu nie musi wiedzieć, czy dane przechowywane są w bazie danych czy w plikach. Dla obiektu ważne jest, aby model miał API, które on zna. Jeżeli będziemy mieli dwie klasy modelu, jedną operując na bazie, drugą na plikach i obie będą miały ten sam interfejs, możemy je wymieniać, bez strachu, że program przestanie działać.
Widok
Widok jest częścią aplikacji odpowiedzialną za wyświetlenie danych. Wymieniając widok możem zmieniać sposób wyświetlania danych, np. pomiędzy html, RSS, XML, flash, pdf, doc, rtr i wiele innych.
Widok powinien pobierać dane z modelu i formatować je do pożądanego formatu. Jak już wspomniano, widok nie wie w jaki sposób przechowywane są dane.
Musimy pamiętać, że widok nie może w żaden sposób zmieniać danych - on może je tylko wyświetlać. Co zrobić gdy potrzebna jest modyfikacja danych, przeczytamy w następnym akapicie.
Kontroler
Kontroler jest sercem całej aplikacji. Odpowiedzialny jest on za przetwarzanie zadań i wywoływanie właściwej akcji lub widoku. Sterowniki do aplikacji możemy spotkać często w internecie pod postacią frameworków.
Jeżeli aplikacja ma wyświetlić pewne dane, wywoływany jest widok. Lecz co zrobić, gdy musimy te dane zmienić? W tym celu należy do sterownika wprowadzić akcje. Akcja jest to pojedyncza czynność wykonywana przez aplikacje. W najczęstszym przypadku akcja jest klasą, która wywołana przez kontroler zwraca nazwę widoku do wyświetlenia. W ten sposób tworzy się łańcuch akcji.
przykład implementacji
Wzorzec MVC można implementować na wiele sposobów. Poniżej przedstawiam najprostszy przykład implementacji MVC w PHP.
<?php /** * klasa modelu */ class Model { public $tytul; public $naglowek; public $tresc; public function pobierzTytul() { return $this->tytul; } public function pobierzNaglowek() { return $this->naglowek; } public function pobierzTresc() { return $this->tresc; } } /** * klasa widoku */ class View { private $tytul; private $naglowek; private $tresc; public function __construct($tytul, $naglowek, $tresc) { $this->tytul = $tytul; $this->naglowek = $naglowek; $this->tresc = $tresc; $this->wyswietlStrone(); } private function wyswietlStrone() { echo '<html>'; echo '<head>'; echo '<title>'.$this->tytul.'</title>'; echo '</head>'; echo '<body>'; echo '<h1>'.$this->naglowek.'</h1>'; echo '<p>'.$this->tresc.'</p>'; echo '</body>'; echo '</html>'; } } /** * klasa kontrolera * obsługuje model oraz uruchamia widok */ class Controller { // obiekty private $model; private $view; // dane private $tytul; private $naglowek; private $tresc; public function __construct() { $this->uruchomModel(); $this->ustawDane(); $this->pobierzDane(); $this->uruchomWidok(); } private function uruchomModel() { $this->Model = new Model; } private function ustawDane() { $this->Model->tytul = 'Tytuł'; $this->Model->naglowek = 'Nagłówek'; $this->Model->tresc = 'Treść'; } private function pobierzDane() { $this->tytul = $this->Model->pobierzTytul(); $this->naglowek = $this->Model->pobierzNaglowek(); $this->tresc = $this->Model->pobierzTresc(); } private function uruchomWidok() { $this->View = new View($this->tytul, $this->naglowek, $this->tresc); } } // uruchomienie prostego wzorca MVC new Controller(); ?>
Kiedy używać?
Wzorca Model View Controller powinniśmy używać jeżeli:
- aplikacja jest duża i skomplikowana
- aplikacja musi być elastyczna, mieć możliwość rozbudowy
- pracuje nad nią wielu ludzi (możemy w łatwy sposób podzielić odpowiedzialość za poszczególne elementy systemu)
Polecamy również
Strona ta opisuje jeden z Wzorców projektowych.
Wzorce projektowe: Definicja | Zalety | Podział wzorców | Lista wzorców