Подход MVC (Model-View-Controller)
В предыдущей статье мы с Вами обсуждали проблему связки PHP и HTML. Я в конце той статьи сказал, что есть некоторые решения, которые немного исправляют ситуацию, однако, они не без недостатков. Так вот самый популярный из них - это подход MVC (Model-View-Controller). И, на самом деле, данный подход является основой для всех остальных. Фактически, MVC ценен не своей "красотой решения", а прекрасной концепцией, к которой надо стремиться.
В основе MVC лежат 3 элемента: Модель, Шаблон и Контроллер. Давайте разберём каждый из них:
- Шаблон (View) - это весь внешний вид страниц. Фактически, это набор HTML-файлов, каждый из которых отвечает за отдельную страницу. За Шаблон отвечает дизайнер.
- Модель (Model) - это набор низкоуровневых функций. Например, по работе с базой данных, по аутентификации пользователей, по отправке e-mail сообщений и так далее. Другими словами, это служебные функции, реализация которых, вообще говоря, скрыта. За эту часть, безусловно, отвечает программист.
- Контроллер (Controller) - это связующее звено между Шаблоном и Моделью. Сюда приходят данные из Шаблона (например, при отправке форм), сюда же приходит ответ от Модели, и именно Контроллер решает, какой шаблон выбрать. За Контроллер отвечает также программист.
На первый взгляд кажется, что это идеальная ситуация, так как мы, вроде бы, добились разделения работы программиста и дизайнера. Да и дизайн изменить легко, достаточно будет просто поменять Шаблон, никак не залезая в программную часть. Но, к сожалению, это далеко не так.
Предположим, нам надо вывести комментарии на страницу. Вот как это может выглядеть:
<?php
require_once "model.php"; // Подключаем Модель
$comments = getComments(); // Некая функция в Модели, возврающая двумерный массив с комментариями
include "index.html"; // Вывод шаблона
?>
Вот кусок кода из index.html, где выводятся комментарии:
<?php
for ($i = 0; $i < count($comments); $i++) {
echo "<li><b>".$comments[$i]["name"].":</b> ".$comments[$i]["text"]."</li>";
?>
Остальная часть - это обычный HTML-код. Как видите, мы пытались избежать PHP-кода в Шаблоне, но у нас это не получилось. Простейший цикл завёл нас в тупик. Тоже самое будет, если потребуется какое-нибудь условие, и вновь без PHP не обойтись. Другой минус, не менее серьёзный, состоит в том, что именно Контроллер решает, какие блоки и выводить на странице. Хотя, что выводить, является задачей дизайнера, а не программиста.
Вывод из этого неутешительный - чистый MVC на практике применять нецелесообразно, но поскольку сама концепция отличная, то в дальнейшем мы с Вами будет развивать подход MVC.
-
- Михаил Русаков
Комментарии (1):
Добавлю от себя: 1. На одну таблицу приходится одна модель. Т.е. за таблицу users отвечает модель Users? если есть связанные данные, например users.id и news.author.id, то тут описание связей в модели, например можно использовать InnoDB. 2. MVC стоит использовать , если вы понимаете, для чего этот паттерн. Если нет понимания, то читать про паттерны) P.S.: статья очень хорошая, в своё время пренебрегал MVC, но когда начал использовать Yii осознал всю прелесть этого паттерна)
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.