Model View Controller
Шаблон MVC часто используется в Web-приложениях. Такой подход позволяет строить трехзвенные приложения и предоставляет необходимые уровни абстракции кода. Кроме того, MVC позволяет упростить взаимодействие дизайнеров и разработчиков, а также - упрощает сопровождение и обновление созданных приложений.
View
Обычно View - это конечный результат работы приложения, который отсылается браузеру (например - код HTML). Говоря о View, многие подразумевают шаблонизатор (template engine), но такая ассоциация весьма спорна.
Основная идея View - он должен существовать "сам по себе". В процессе рендеренга View его элементы должны знать о своей роли в системе. Если для примера рассмотреть XML, то при обработке документа XML с помощью DOM API такое "знание" присутствует - узел в дереве DOM "знает", где он находится и что он содержит, в то время, как при обработке с помощью SAX узел ничего не знает до тех пор, пока обработчик не добереться до него.
Большинство шаблонизаторов в PHP используют простой процедурный язык, который используется примерно следующим образом:
<p>{some_text}</p>
Эти теги не имеют представления о том, в какой документ они превратяться, что они будут собой представлять, и существуют только для того, чтобы шаблонизатор заменил их реальными данными.
Если вы согласны с таким определением View, то вы вероятно согласитесь и с тем, что большинство шаблонизаторов неспособны создать требуемое разделение между Model и View, так как шаблонизатор ничего не знает о соответствии данных из модели тегам шаблона.
Model
Model включает в себя логику работы приложения (в корпоративных приложениях обычно называется бизнес уровнем).
В общем случае Model занимается превращением исходных данных в данные, имеющие смысл, которые передаются во View для последующего отбражения. Часто модель содержит SQL-запросы, в некоторых случаях обладая преимуществом перед абстрактным классом БД.
Допустим, мы хотим посчитать средний уровень осадков в Великобритании за год (для того, чтобы убедиться, что это лучшее место для проведения отпуска). Модель получает данные о ежедневном уровне осадков за последние 10 лет, высчитывает среднее значение за год и отдает результат View.
Controller
Контроллер обычно вызывается первым при получении HTTP запроса. Он обрабатывает запрос (GET, POST переменные, cookie и т.п.) и ормирует соответствующий ответ. Наврядли можно начать кодирование в PHP без написания самого примитивного Controller'а наподобии этого:
<?php
switch ($_GET['viewpage']) {
case "news":
$page=new NewsRenderer;
break;
case "links":
$page=new LinksRenderer;
break;
default:
$page=new HomePageRenderer;
break;
}
$page->display();
?>
Хотя в этом коде перемешаны процедурный и объектный подходы, для небольшого Web-сайта такой подход может быть оптимальным.
Контроллер также является компонентом, связывающим данные из Model с элементами View.