MVC Patern, модель в представлении

Я работаю с PHP и понимаю, как работает MVC. Есть одна вещь, в которой я не уверен в MVC. Является ли хорошей практикой создание объекта Model непосредственно в представлении, не пропуская его через контроллер, поскольку иногда нет необходимости обрабатывать модель в контроллере? Есть ли недостаток в этом?

0

Решение

Это против концепции MVC

Не пытайтесь сломать архитектуру

модель — Самый низкий уровень шаблона, который отвечает за ведение данных.

Посмотреть — Это отвечает за отображение всех или части данных для пользователя.

контроллер — Программный код, который контролирует взаимодействие между моделью и представлением.

введите описание изображения здесь

Ссылка Вот

-1

Другие решения

Ваш view отображает только результаты, поэтому new Model() должен перейти к контроллеру и позже будет передан для просмотра.

-2

Да, ваш взгляд не должен полагаться на то, что модель останется прежней.

Скажем, например, вы используете модель, которая имеет ->forename а также ->surname атрибутов. По вашему мнению, вы просто называете это напрямую.

Затем вы решите позже, что вы собираетесь добавить мутаторы и методы доступа (геттеры и сеттеры) к вашей модели, поэтому вы будете использовать ->getForename() а также ->getSurname() потому что вы хотите сделать некоторую предварительную обработку для них, чтобы убедиться, что капитализация правильная

Теперь вам нужно пройти через все ваши контроллеры а также просмотров, потому что использование должно измениться.

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

Представление не должно ожидать ничего от Модели, оно должно просто требовать, чтобы оно получало определенные данные от Контроллера.

Вы можете сделать что-то вроде этого в вашем контроллере:

$view = new View('my.file', [
'user' => [
'forename' => $user->forename,
'surname' => $user->surname,
],
] );

это все еще дает вам $user['forename'] использовать в вашем представлении, но теперь формат этих данных поступает из контроллера, а не из модели.

-2
По вопросам рекламы [email protected]