Модели, представления, представления моделей и докладчиков - PullRequest
2 голосов
/ 19 апреля 2011

Я пытаюсь разобраться с различными шаблонами (MVP, MVVM и т. Д.) И найти тот, который соответствует моим потребностям. После всех моих чтений я все еще не уверен. Надеюсь, кто-то может пролить свет на это для меня.

На данный момент у меня есть WPF View, который реализует интерфейс ICustomView. Этот интерфейс вводится в мой Presenter. Затем докладчик отвечает за подписку на данные, управление подписками и т. Д. Когда данные возвращаются докладчику, он вызывает различные методы для модели (коллекция IObservable CustomBusinessObjects). Это делается с использованием интерфейса ICustomView, поскольку IObservable является свойством модели.

Проблема, которую я вижу с этим, состоит в том, что Модель слишком связана с Видом. Также докладчик решает, какие методы вызывать против модели. На данный момент представление состоит из сетки WinForms, и это предоставляется ICustomView, что позволяет докладчику вызывать методы для представления. Однако это добавляет к соединению Presenter и View, что затрудняет замену этой сетки WinForms на сетку или диаграмму WPF и т. Д.

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

Звучит ли это как разумная идея? Я что-то здесь упускаю?

Любой совет приветствуется.

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Я бы порекомендовал перейти с MVP на MVVM, потому что вы используете WPF. Я бы использовал только MVP, если бы вы использовали ASP.Net или WinForms.

При этом ваши объекты MVVM будут:

Модель: Простой объект данных. Он не должен содержать никаких функций, таких как «Сохранить» или «Редактировать», но может иметь логику проверки.

Просмотр: Ваш пользовательский интерфейс. Я обычно делаю мой как DataTemplate для типа класса ViewModel. Он должен привязываться к свойствам и командам ViewModel.

ViewModel: Часть, которая объединяет два. Любые данные, отображаемые в представлении, должны быть привязаны к свойству в модели представления. Любые команды в вашем представлении, такие как нажатия кнопок, также должны указывать на методы в ViewModel.

Например, когда пользователь нажимает кнопку GetCustomer в представлении, ViewModel должна получить команду, перейти и получить CustomerModel и предоставить свои свойства для привязки к представлению. Когда пользователь нажимает Сохранить, ViewModel должен проверить, что Модель действительна, а затем выполнить код Сохранить, используя его свойство CustomerModel.

0 голосов
/ 19 апреля 2011

Лично при использовании WPF я предпочитаю использовать сетку данных WPF и привязывать ее к текстовому тексту в шаблоне MVVM. Я думаю, что первое, от чего вам нужно избавиться, это сетка WinForms (будет почти невозможно отделить вашу модель / представление, пока вы используете сетку WinForms.

Я бы изучил несколько разных вещей.

  • Шаблон MVVM
  • WPF DataGrid
  • Привязка DataGrid к DataContext

Как только вы дойдете до этой точки, все, что вам нужно будет сделать, это обновить текст данных, и ваш вид обновится вместе с ним.

...