Сначала вам нужно решить, какой шаблон вы собираетесь использовать. MVC и MVP немного отличаются. Взгляните на Поворот Триады для хорошего обзора различий между ними.
MVP дополнительно подразделяется на два варианта: Контролирующий ведущий / контроллер и Пассивный просмотр . Я склонен больше склоняться к Пассивному обзору, но нередко можно встретить в своей работе супервизирующего докладчика / контроллера, когда это уместно. Причина, по которой мне нравится Passive View, заключается в том, что он перемещает как можно больше кода из пользовательского интерфейса в отдельные классы, где его легче тестировать модулем. Пассивное представление сводится к делегированию операций с данными в Presenter, что обычно дополнительно распределяет ответственность перед объектами домена. (не путать с делегатами C #, хотя это один из способов сделать это)
Сложные элементы управления пользовательского интерфейса, такие как ListView, DataGridView (и его предшественник DataGrid) и TreeView, могут стать препятствием для пассивного просмотра MVP, особенно (для этого руководящий Presenter / Controller обычно использует привязку данных).
- Они отображают несколько различных значений данных, которые могут совпадать с атрибутами одного объекта домена или нескольких объектов домена.
- Они редко имеют мелкозернистые события для обработки обновления отдельных значений данных.
Иногда лучший способ действий - найти альтернативный способ отображения данных. В некоторых случаях вы можете заменить отображение нескольких строк связанных данных на форму и элементы управления навигацией. В других случаях это не так ясно. В моем собственном опыте я успешно использовал свойство Tag для хранения ссылок на объект домена, представленный этим элементом списка, и View не знал ничего о типе данных, который он сохранял. Я достиг этого, передав поля объекта, которые должны отображаться в виде системных типов, и сам объект как простой объект System.Object в метод Add () в представлении.
Создание непроверяемого метода в представлении может показаться противоречащим всей сути MVP, но на самом деле это всего лишь установщик для нескольких атрибутов. В методе не происходит никаких манипуляций с данными или расчетов. Так что в любом случае можно провести небольшое тестирование.
Надеюсь, это поможет.