Model View Controller

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

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