2013-12-22 5 views
2

Пользовательский ввод принимается контроллером. Контроллер управляет/редактирует Модель. View может запросить модель, чтобы получить новое состояние для diplaying. Точка, которую я не получаю, это тот, кто на самом деле уведомляет вид изменений? Потому что в схематическом обзоре кажется, что контроллер отправляет сообщения об изменении и что модель также уведомляет об изменении изменений.Model-View-Controller: кто уведомляет View

Даже в примере оба уведомления видят. Если контроллер посылает, например, положение иглы, почему модель все еще уведомляет View?

[Фигуры из горок нашего профессора, так что они правильны так или иначе]

MVC

Example

ответ

2

Это было немного смутно, поэтому я искал googled, чтобы увидеть, что некоторые ведущие authorities должны сказать, потому что Википедия и первые хиты не так хороши, как кажется.

  • Модель. Модель управляет поведением и данными домена приложения, отвечает на запросы информации о его состоянии (обычно из представления) и отвечает на инструкции по изменению состояния (обычно из контроллера).
  • View. Просмотр управляет отображением информации.
  • Контролер. Контроллер интерпретирует входные данные мыши и клавиатуры от пользователя, , информируя Модель и/или вид, чтобы изменить в случае необходимости.

Похоже, что контроллер уведомляет View.

Но важно отметить, что и View, и Controller зависят от модели. Однако Модель не зависит ни от вида, ни от контроллера. Это одно из ключевых преимуществ разделения. Это разделение позволяет создавать и тестировать модель независимо от визуального представления.

MVC

И, конечно же, контроллер не может быть только один, который изменяет модель.По этой причине действительно существуют некоторые варианты:

Модель пассивная используется, когда один контроллер управляет только моделью. Контроллер изменяет модель и затем информирует View, что Модель изменилась и должна быть обновлена. Модель в этом сценарии полностью независима от View и Controller, а это означает, что нет возможности для Модели сообщать об изменениях в ее состоянии.

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

2

Модель не должна обязательно уведомить View - в этом случае вы получите пассивная реализация MVC, см. wikipedia.

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

Например, перед веб-сайтами и кометами всегда будет отображаться веб-представление контроллера, который будет опросить модель и отобразить новый вид. С помощью WebSockets или Comet вы можете иметь контроллер, уведомляющий View.

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

+0

Это скорее выбор разрешения опроса модели, модели, уведомляющей View напрямую, или контроллера, обновляющего модель -> модель, уведомляющую контроллер -> контроллер, уведомляющий представление, или контроллер, обновляющий модель -> Контроллер, опросив состояние модели -> Контроллер, уведомляющий представление? – Matthias

+0

Да, есть выбор. Например, перед WebSockets и Comet, всегда будет веб-представление, уведомляющее контроллер, который будет опросить модель и отобразить новый вид. С помощью WebSockets или Comet вы можете иметь контроллер, уведомляющий View. Тем не менее, ваш профессор может более строго рассмотреть этот вопрос. –

+0

@ Matthias, это не MVC. То, что вы описали, может быть названо MVP. –

Смежные вопросы