MVC: модели взаимодействуют с представлением? - PullRequest
5 голосов
/ 27 апреля 2010

Я знаю, что все проходит через контроллер.

но я часто читаю статьи, в которых говорится что-то вроде этого:

  1. пользователь взаимодействует с представлением
  2. контроллер просит модель изменить свое состояние
  3. модель уведомляет вид, когда его состояние изменилось

Я не получаю 3-го. зачем говорить, что модель уведомляет представление, когда фактически уведомляет контроллер, а контроллер уведомляет представление?

Ответы [ 4 ]

3 голосов
/ 27 апреля 2010

Это больше похоже на настольную систему, а не на систему без состояния, такую ​​как веб-сайт.

Но, возможно, речь идет о том, как некоторым людям нравится запрашивать модели из представления, например,

<?php foreach( $usersTableGateway->getUsers() as $user ): ?>
<?php echo $user ?><br>
<?php endforeach; ?>

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

2 голосов
/ 27 апреля 2010

MVC - это широкая концепция, и существует множество возможных реализаций. Например, Page Controller отделяет логику от представления, как и Front Fontroller. Каждая инфраструктура MVC также имеет разные методы визуализации данных модели в представлении - Zend использует, например, Two-Step.

Возможно, вы могли бы установить отношение Observer между объектом вида и «моделью» (которая сама по себе является действительно сложным зверем), но я думаю, что этот аспект шаблона MVC больше связан с исходным контекстом шаблона - то есть точка Галена выше

1 голос
/ 02 мая 2010

Это не нарушает принципы MVC, чтобы ваш View слушал напрямую вашу модель (см. здесь ). ASAIK единственное твердое правило MVC - это то, что у вас есть толстая слепая модель, которая защищает данные и бизнес-логику и не знает о других частях системы. Как разграничены виды и контроллеры, и их связь с моделью определена менее строго.

1 голос
/ 27 апреля 2010

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

Если концептуальное разделение фреймворка между контроллером и моделью не так ясно, как должно быть, то часть о «модели уведомляет представление об изменении его состояния» - это действительно бит контроллера, который оказывается модель.

В конце концов, MVC - это руководство, которое в основном зависит от четкого разделения интересов. Если используемая вами среда описывает вещи таким образом ... ну, на самом деле это не MVC. Это может сработать, но также может привести к сбою неожиданным или даже необнаруженным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...