Может ли Модель взаимодействовать / изменять представление в шаблоне MVC? - PullRequest
0 голосов
/ 10 декабря 2018

Взаимодействия компонентов шаблона MVC описаны в Википедии следующим образом:

Модель отвечает за управление данными приложения.Он получает пользовательский ввод от контроллера. Представление означает представление модели в определенном формате.Контроллер реагирует на ввод пользователя и выполняет взаимодействия с объектами модели данных. Контроллер получает входные данные, при необходимости проверяет их и затем передает входные данные в модель.

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

enter image description here

Мы видим, что Модель делает взаимодействовать с представлением и может изменять его, и это не имеет смысла.Разве Model не обновляет Controller , который обновляет View ?

Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Диаграммы - стоит тысячи слов!Точные слова и контекст, используемые в диаграмме, возможно, не рассказывают историю реализации, скажем, в Microsoft MVC 5/6.

Взаимодействие пользователя с контроллером.Не вид и не модель.Вызов действия на контроллере вернет что-то (представление, файл, перенаправление и т. Д.).

В случае возврата представления информации контроллер, определив, какие данные есть у пользователязапрашивающий может получить модель, которая соответствует запросу, передать ее в представление и вернуть результат просмотра этой модели.

На приведенной выше диаграмме не ясно, что контроллер действует как агент при перемещении.модель в поле зрения.модель не определяет вид.Зачем?В зависимости от того, что в модели возвращается контроллер, может быть возвращено другое представление.Вот почему контроллер точно назван.Он находится в центре дел, принимая решения и перемещая объекты.

Так что вам не хватает некоторого контекста о том, как происходит процесс MVC при реализации

0 голосов
/ 10 декабря 2018

Архитектура MVC была создана в 1970-х годах.Очевидно, в то время не было Интернета.В исходной версии Модель напрямую обновляет привязку данных Просмотр , также известный как публикация / подписка , также известный как Шаблон наблюдателя .

В книге «Банда четырех шаблонов проектирования» подробно описывается эта архитектура MVC.Несколько цитат из этой книги есть в другом ответе здесь .

Архитектура MVC была очень популярна, и когда появился Интернет, разработчики захотели продолжать его использовать;но это не вписывалось хорошо в клиент-серверные приложения.Так родился "WebMVC", версия, которую вы чаще всего видите сегодня.WebMVC обычно реализуется как многоуровневая архитектура, которой изначально не было.

Путаница возникает, когда две архитектуры объединены.Часто оба упоминаются просто как MVC.Хуже того, связанные архитектуры, такие как MVP и MVVM, можно назвать MVC.

Лично я нахожу взаимосвязь между настольным MVC и веб-MVC в некоторой степени похожей на взаимосвязь между Java и JavaScript.Последний воспользовался известным именем первого, чтобы реализовать что-то значительно другое.

related: Это MVC, когда представление не взаимодействует с моделью?

0 голосов
/ 10 декабря 2018

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

...