Winforms MVP Grid События Проблема - PullRequest
2 голосов
/ 15 мая 2009

Я пытаюсь реализовать шаблон MVP для WINFORMS. Это просто для кнопки и сетки, при нажатии кнопки сетка будет загружена, и пользователь может ввести значения в сетку.

Для моего события нажатия кнопки у меня есть что-то вроде этого:

_presenter.LoadGrid ();

Что просто и понятно.

У меня вопрос к сетке ... Я планирую запустить событие щелчка строк ... для включения / отключения последующих полей ввода для определенных столбцов / строк сетки и т. Д.

Я так понимаю, что докладчик не должен содержать никаких элементов графического интерфейса, а представление (форма) не должно содержать логики?

Итак, чтобы запустить событие GridRowClick, мне нужно манипулировать сеткой (GUI) на основе бизнес-правил (логики). Я потерял между тем, чтобы позволить докладчику обрабатывать логику этого события клика или форму?

Если докладчик должен обрабатывать событие щелчка, разве в него не входят компоненты графического интерфейса? Если представление должно обрабатывать событие click, все имена полей и т. Д. Являются бизнес-ориентированными (логическими), динамически связанными на основе данных, возвращаемых из бизнес-уровня.

Любой совет будет высоко ценится.

Приветствия

Ответы [ 3 ]

1 голос
/ 15 мая 2009

Существует (как минимум) два варианта MVP.

  • Шаблон пассивного просмотра
  • Шаблон контролера

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

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

В любом случае обработка события выполняется путем делегирования методу презентатора:

EventHandler()
{
    presenter.HandleEvent();
}

Если обработка события требует внесения изменений в форму, вы предоставляете то, что необходимо обновить как свойство:

public string PropertyThatNeedsToBeUpdated
{
    get
    {
        return Control.Property;
    }
    set
    {
        Control.Property = value;
    }
}

Для пассивного просмотра сетки являются препятствием. Их сложность затрудняет захват всех возможных событий. Контроллер Supervising упрощает сетку, поскольку вы оставляете синхронизацию данных до элементов управления с привязкой к данным.

Вы должны сделать суждение о том, что больше подходит для вашей ситуации.

0 голосов
/ 11 сентября 2009

Возможно, вы захотите проверить Часть 4 видео-серии из Полиморфного Подкаста. Он использует шаблон контролирующего контроллера и демонстрирует методику работы с сетками данных. Вся серия была для меня хорошим вступлением.

http://polymorphicpodcast.com/shows/mv-patterns/

0 голосов
/ 15 мая 2009

Ключом является передача всей этой бизнес-логики в презентатор, где ее можно тестировать.

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

Затем докладчик выполняет бизнес-логику и обновляет данные.

В зависимости от того, какой тип изменений вам нужно внести, это может быть все, что вам нужно сделать, поскольку существующей привязки данных может быть достаточно для автоматического обновления представления. Если этого недостаточно, докладчик может сделать один или несколько вызовов для представления (через его интерфейс, разумеется) для внесения необходимых изменений.

Как вы говорите, вы должны стремиться минимизировать количество нетривиального кода в вашем представлении, и в частности, представление не должно иметь никакой бизнес-логики.

EDIT:

Некоторая хорошая общая информация о MVP и других шаблонах представления здесь: http://martinfowler.com/eaaDev/uiArchs.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...