Где поставить View State как выборки в MVC? - PullRequest
1 голос
/ 04 марта 2012

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

Но к чему относится состояние представления?

Например, если у вас есть игра в шахматы, вы можете отслеживать, какая фигура выбрана и какие поля выделены (возможно, вы хотите выделить возможные ходы).

Я читал о презентационной модели http://martinfowler.com/eaaDev/PresentationModel.html, которая является одним из способов сделать это.

Я могу придумать другие способы сделать это:

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

Но каков "нормальный" способ сделать это в mvc (если есть такая вещь, как нормальный способ), или какой способ вы используете или рекомендуете?

1 Ответ

0 голосов
/ 05 марта 2012

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

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

...