1) Ответственность контроллера заключается в основном «выполнить действие, выбрать соответствующее представление, предоставить некоторые данные для этого представления и вернуть представление пользователю».
2) Поскольку MVC пытается разделить логику представления и рендеринг пользовательского интерфейса, я считаю, что контроллер не должен пытаться выполнять какие-либо из обязанностей по просмотру: прослушивание событий пользовательского интерфейса или предварительное форматирование значений dateString = data.ToString('YYYY-MM')
- это все, что нужно вид.
3) в представлении MVC известно все о модели - модель отображается представлением без какого-либо участия контроллера (это основная «проблема», устраняемая MVP, когда представление должно и модель должны быть связаны как можно больше). Однако для просмотра не рекомендуется запрашивать модель напрямую. Вместо этого следует сообщать обо всех изменениях данных для просмотра по модели с использованием шаблона Observer.
Рассмотрим следующее -
схема из статьи в википедии - пунктирная линия от модели к представлению указывает на этот факт. Просто помните, что модель здесь больше viewmodel и не должна быть частью слоя BL.
Так что здесь сценарий может быть следующим:
- Пользователь нажимает кнопку «Добавить элемент»
- Просмотр отправляет запрос контроллеру с данными элемента
- Контроллер вызывает BL, который вносит изменения в модель (добавляет новый элемент в список).
- Модель запускает «обновленное» событие для представления (или «ошибка», если есть проблемы в нижележащих слоях)
- Просмотр обновлений интерфейса в соответствии с зарегистрированными изменениями.
4) Утверждение совершенно верно. В MVC вы не должны этого делать. Я полагаю, что в MVP вы не должны этого делать - я имею в виду, слушая события непосредственно из интерфейса. Это должно быть сделано либо путем пересылки события по представлению; или используя представление представления, не зависящее от платформы, например
inderface IMyGridView
{
event ItemEvent AddItemClick;
}
(что не имеет смысла для MVC, поскольку представление в значительной степени не зависит от контроллера, и в основном все действия представления приводят к вызовам контроллера).