Как бы вы использовали шаблон MVC с Winforms, когда дело доходит до использования ListViews? - PullRequest
2 голосов
/ 09 октября 2009

Мой старый способ работы с приложением WinForms сводил всю логику к самой форме.

Я пытаюсь начать использовать методы MVC / MVP с моими приложениями WinForms.

Может кто-нибудь показать мне пример того, как я буду использовать MVC / MVP в сочетании с, скажем, ListView? Я использую свойство Tag самого ListView для хранения объектов, представленных в ListView.

Я понимаю, что это плохая практика и тесно связывает меня с моей презентацией, но мне трудно вырваться из нее.

Например, у меня был ListView «История лута», в котором отображался список предметов, которые я украл из MMO. Я использовал свойство «Tag» каждого нового элемента ListView для хранения самого объекта «Loot». Поэтому, когда я выполнял удаление или поиск среди добычи, я искал теги этого списка.

Как правильно справиться с этой ситуацией?

Должен ли мой класс контролера удерживать Список предметов из моего лута, и он передает это в мою Форму? Контроллер создает / владеет формой? Если нет, то кто это создает?

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Если он работает аналогично ASP.NET MVC, ответ на оба ваших вопроса - да. Контроллер удерживает список ваших товаров и отвечает за создание экземпляра формы.

Если вы хотите быть «правильным», то посмотрите, как это делает Koossery.MVCwin . Их утверждение о контроллерах:

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

См. Также https://stackoverflow.com/questions/2406/looking-for-a-mvc-sample-for-winforms

0 голосов
/ 10 октября 2009

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

MVP дополнительно подразделяется на два варианта: Контролирующий ведущий / контроллер и Пассивный просмотр . Я склонен больше склоняться к Пассивному обзору, но нередко можно встретить в своей работе супервизирующего докладчика / контроллера, когда это уместно. Причина, по которой мне нравится Passive View, заключается в том, что он перемещает как можно больше кода из пользовательского интерфейса в отдельные классы, где его легче тестировать модулем. Пассивное представление сводится к делегированию операций с данными в Presenter, что обычно дополнительно распределяет ответственность перед объектами домена. (не путать с делегатами C #, хотя это один из способов сделать это)

Сложные элементы управления пользовательского интерфейса, такие как ListView, DataGridView (и его предшественник DataGrid) и TreeView, могут стать препятствием для пассивного просмотра MVP, особенно (для этого руководящий Presenter / Controller обычно использует привязку данных).

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

Иногда лучший способ действий - найти альтернативный способ отображения данных. В некоторых случаях вы можете заменить отображение нескольких строк связанных данных на форму и элементы управления навигацией. В других случаях это не так ясно. В моем собственном опыте я успешно использовал свойство Tag для хранения ссылок на объект домена, представленный этим элементом списка, и View не знал ничего о типе данных, который он сохранял. Я достиг этого, передав поля объекта, которые должны отображаться в виде системных типов, и сам объект как простой объект System.Object в метод Add () в представлении.

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

Надеюсь, это поможет.

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