MVC jest to model programistyczny dzielący aplikację na trzy warstwy: model, widok(view) oraz kontroler(controller).

Model jest to warstwa odpowiadająca za obliczenia. Dzięki plikom modelów, możemy pobrać informacje z plików, bazy danych oraz odpowiednio je przetworzyć.

Widok jest warstwą prezentacji, dzięki której użytkownik może zobaczyć efekt działania aplikacji. W przypadku stron internetowych są to zazwyczaj pliki html.

Kontroler jest to warstwa, która łączy widok z modelem. Kontroler ma akcje, które są wywoływane na podstawie odpowiednich parametrów podanych przez użytkownika np. adres strony internetowej.

Praktyczne użycie wzorca MVC

Wyobraźmy sobie sytuacje, gdzie użytkownik wchodzi na stronę internetową pod adresem „http://rpodwika.pl/pliki/pobierzplik/id/3” co się wtedy dzieje?

Podczas wywołania tego adresu kontroller wie, że musi przekazać działanie kontrolerowi „pliki” a następnie wywołać akcje „pobierzplik” i przekazać parametr „id” o wartości „3„. Następnie w tej akcji tworzymy nowy obiekt modelu, który na podstawie wartości 3 zwróci odpowiednie dane, które zostaną wyświetlone za pomocą widoku „pliki/pobierzplik.html

Dzieki takiemu podejściu mamy jasno zdefiniowane kto za co odpowiada. Każdy dobry framework korzysta ze wzorca MVC np. Zend 1.x lub Symfony.

Specjalnie dla tej strony przygotowałem przykład działającego modelu MVC. Zobacz na kod poniżej:

//[c]Robert Podwika dla potzeb strony blog.rpodwika.pl
//uzywanie pod warunkiem zamieszczenia informacji, że kod pochodzi ze strony http://blog.rpodwika.pl

abstract class Model
{
  protected $dbConnection;

  private function connectToDb()
  {

  }

  protected abstract function getData();
}

abstract class View
{
  protected $assignedVariables;
  public abstract function display();
  public abstract function fetch();
  public function assign($variable, $value)
  {
     $this->assignedVariables[$variable] = $value;
  }
}

abstract class Controller
{

}

class UserView extends View
{
   private $fileContent;

   public function display()
   {
     //pobranie pliku html i wyswietlenie go w naszym przypadku bedzie to zwykle przypisanie tekstu
     $this->fileContent = "czesc {imie} o numerze {id}";
	 $this->fetch();
	 echo $this->fileContent;
   }
   public function fetch()
   {
      foreach($this->assignedVariables as $var => $val)
	  {
	    $this->fileContent = str_replace("{{$var}}", $val, $this->fileContent);
	  }
   }
}

class UserModel extends Model
{
   public function getData()
   {
      return array('id' => 1,'imie' => 'robert');
   }
} 

class UserController extends Controller
{
   public function show() //nazwa taka sama jak w UserView
   {
       //uproszczone mechanizm

	   //pobranie danych
	   $userModel = new UserModel();
	   $data = $userModel->getData();
	   $userView = new UserView();
	   $userView->assign('imie', $data['imie']);
	   $userView->assign('id', $data['id']);
	   $userView->display();

   }
}

$userControl = new UserController();
$userControl->show();

Dziający kod można zobaczyć na stronie http://phpfiddle.org/lite/code/7v8-cr5

Tworzenie stron internetowych w modelu MVC znacznie ułatwia organizację projektu. Jeśli na poważnie myślisz o tworzeniu stron www powinieneś zacząć pisać projekty w MVC.