шаблон дизайна mvp - вопрос - PullRequest
2 голосов
/ 16 июня 2010

Когда у меня есть кнопка, которая только меняет что-то в моем представлении (например, такой, что появляется некоторый текст, если я нажимаю на него), могу ли я записать весь код в файл вместе с моим представлением или я должен включить обработку событий этой кнопки введущий?Это проблема для меня, потому что я не знаю, обрабатывает ли докладчик все события из представления или только эти, которые что-то меняют в модели?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

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

Представь себе задачу, где нужно сделать 2 кнопки. Первая кнопка загружает данные из базы данных и показывает их, а вторая кнопка меняет цвет страницы на случайное значение. Есть 2 способа сделать это:

  1. Модель будет иметь LoadedData loadedData и Color color. Presenter будет управлять обеими кнопками таким образом.
  2. Можно было бы решить, что цвет является частью презентационной части и не имеет ничего общего с моделью. Таким образом, в модели не будет цвета, и все виды генерации случайных цветов и даже кнопки будут отображаться в представлении.

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

0 голосов
/ 16 июня 2010

Я думаю, это зависит от того, как вы себя чувствуете.Лично я предпочитаю реализацию Passive View, но, если я правильно понял, и Passive View, и Supervising Controller предписывают, чтобы Presenter обновлял View (кроме простого связывания данных в случае Supervising Controller).Другое исключение может быть, если вы просматриваете веб-форму и хотите обновить ее на стороне клиента с помощью javascript.

Вы можете взглянуть на следующее:

http://msdn.microsoft.com/en-us/library/ff647543.aspx

, где вы можете найти абзац: Просмотр обновлений

"Когда модель обновляется, представление также необходимо обновить, чтобы отразить изменения. Обновления представления можно обрабатывать несколькими способами. Модель-представление-Варианты Presenter, Passive View и Supervising Controller, определяют различные подходы к реализации обновлений представлений.

В Passive View докладчик обновляет представление, чтобы отразить изменения в модели. Взаимодействие с моделью обрабатывается исключительно докладчиком.; представление не знает об изменениях в модели.

В Supervising Controller представление напрямую взаимодействует с моделью для выполнения простой привязки данных, которую можно определить декларативно, без вмешательства докладчика. Докладчик обновляет модельон манипулирует состоянием зрения только в тех случаях, когдатребуется логика пользовательского интерфейса plex, которая не может быть декларативно задана.Примеры сложной логики пользовательского интерфейса могут включать изменение цвета элемента управления или динамическое скрытие / отображение элементов управления. "

Надеюсь, что это полезно

Matteo

...