MVC: Образцовый Контроллер Представления — Представление называет Модель?

Я читал о дизайне MVC некоторое время теперь, и это кажется официально объектами вызовов Представления и методами в Модели, сборках и производит представление.

Я думаю, что это главным образом неправильно.

Контроллер должен действовать и получить/обновить объекты в Модели, выбрать соответствующее Представление, и передавать информацию ему так он может отобразиться. Только сырая нефть и rudiementary PHP переменные / простой, если операторы должны появиться в Представлении.

Если Представление получает информацию, это должно отобразиться из Модели, конечно, будет много PHP в Представлении - полностью нарушение точки разделения логики представления.

6
задан Gary Green 12 April 2010 в 11:44
поделиться

5 ответов

Я думаю, вы абсолютно правы - представления не должны вызывать методы из моделей. Как говорили другие, существуют вариации на тему MVC, но суть в том, чтобы отделить логику от данных и вывода.

Итак, обычно у вас есть контроллер, который является начальной точкой для приложения. В PHP это будет ваш файл index.php. Как минимум, этот файл будет обрабатывать входные данные (т.е. строку запроса или параметры URL). Обычно хорошей идеей является добавление отдельных контроллеров для отдельных частей приложения.

Каждый контроллер затем просто решает, какие данные нужно отобразить, получает их из модели и передает в представление. В PHP вы бы вызывали различные классы/методы, которые получают данные из базы данных, сохраняя их в переменных.

Затем вы просто включаете другой PHP-файл, содержащий в основном HTML, но с некоторыми переменными PHP, передающими эхо. Циклы тоже подойдут. Если у вас есть список вещей, вы можете сделать что-то вроде этого:

<ul>
<?php foreach ($items as $item) : ?>
  <li><?=$item?></li>
<?php endforeach; ?>
</ul>
1
ответ дан 8 December 2019 в 04:29
поделиться

MVC относится к слоям, а не к компонентам. Так что это более абстрактные понятия, чем чертежи. Поскольку на самом деле невозможно полностью разделить слои (информация должна течь между ними), это действительно континуум, где у вас есть спагетти с одной стороны и бюрократические системы типов с другой. Вы, вероятно, захотите найти что-то среднее между этими двумя.

Я обычно не трачу слишком много усилий на разделение контроллера и представления. Гораздо важнее разделение между моделью и (представлением контроллера).

1
ответ дан 8 December 2019 в 04:29
поделиться

MVC не высечен в камне. В зависимости от того, где вы об этом прочитали, он может отличаться. Лично я не разрешаю View читать непосредственно из модели.

Обновление В этом сообщении также есть несколько хороших примеров. Модель - это двигатель автомобиля с методами, подобными start (), представление - это цвет автомобиля с методами paint () или change (), а контроллер - это драйвер. Я предпочитаю позволить контроллеру вести () машину и запускать () двигатель, вместо того, чтобы позволить колесам или краске делать это.

:)

1
ответ дан 8 December 2019 в 04:29
поделиться

Не существует одного абсолютного и правильного способа сделать MVC. Возможны вариации.

Например, вместо того, чтобы представление активно запрашивало модель, контроллер может уведомить представление о любых изменениях в модели, используя какой-то механизм уведомления. В этом случае View просто прослушивает обновления, которые затем представляются.

9
ответ дан 8 December 2019 в 04:29
поделиться

Возможно, это не то, что можно назвать "чистым" MVC, но IMHO это не имеет большого значения до тех пор, пока PHP-код представления не изменяет модель. Самое важное правило MVC заключается в том, что модель не знает о представлении. То, что представление не знает о модели, менее важно.

Основной недостаток прямого использования модели заключается в том, что представление не может быть повторно использовано с другой моделью. Это редко является проблемой, потому что представление почти всегда специфично для одного конкретного типа объекта модели (или их списка).

3
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: