Почему государство не может быть частью Presenter в MVP? - PullRequest
8 голосов
/ 23 июня 2011

Я прочитал http://www.codeproject.com/KB/architecture/MVC_MVP_MVVM_design.aspx и он сказал:

Как мощный, как MVC, так и У MVP есть свои проблемы. Один из них является постоянством состояния View. Например, если модель, будучи доменный объект, ничего не знает про интерфейс, а вид не реализовать любую бизнес-логику, то где мы будем хранить состояние Просмотр элементов, таких как выбранный Предметы? Фаулер предлагает решение в форме модели презентации шаблон.

Интересно, почему Presenter не может удерживать состояние просмотра? Он уже содержит всю логику просмотра.

Насколько я понимаю, в MVC и MVP состояние сохраняется в View. В PM и MVVM состояние сохраняется в модели представления. Почему Presenter не может следить за PM в этом конкретном случае и содержать состояние просмотра?

Вот еще одна статья, в которой говорится, что Presenter не удерживает состояние просмотра, вместо этого -: 1013 *http://www.codeproject.com/KB/aspnet/ArchitectureComparison.aspx

1 Ответ

7 голосов
/ 28 июня 2011

Я думаю, что вы абсолютно правы, когда говорите, что представление хранит состояние представления в MVP: это просто способ, которым «проблемы разделены» в MVP. В «чистом MVP» состояние просмотра сохраняется в представлении, а не в презентере. Докладчик может запросить представление о его состоянии, используя методы, предоставляемые интерфейсом представления.

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

Просто помните об общих мотивах использования паттернов PM или MVP.

В веб-статье eeaDev Фаулера о модели презентации он заявляет:

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

Фаулер продолжает:

По сравнению с пассивным просмотром и Контролер, Презентация Модель позволяет писать логику, которая полностью независим от взглядов используется для отображения. Вам также не нужно полагаться на представление для сохранения состояния. Недостатком является то, что вам нужно механизм синхронизации между презентационная модель и вид.

Я не согласен с утверждением, которое вы цитируете в своем вопросе:

Одной из [проблем MVP] является сохранение состояния View.

Это не проблема: это выбор. IMO Fowler не упоминает об этом «состоянии постоянства представления» как мотивация использовать модель представления вместо MVP, будь то Контролирующий контроллер или Пассивное представление .

Я не совсем уверен, что Фаулер с "хранить состояние" означает постоянство в смысле "через время жизни приложения". Но независимо от того, дело в том, что это выбор с компромиссом: когда вы используете Presentation Model вместо MVP, вы получаете

  • лучшая тестируемость состояния просмотра
  • независимость просмотра от (сохранения) состояния просмотра
  • «Программист» может создавать PM, а «Дизайнер пользовательского интерфейса» может отдельно работать над представлением

за счет

  • необходимость синхронизации представления с моделью презентации

Обратите внимание, что последние "затраты" в настоящее время могут быть меньше, чем на момент написания Фаулером (2006), из-за современных методов синхронизации пользовательского интерфейса, таких как привязка данных .NET.

...