#wpf #mvvm #mvp
#wpf #mvvm #mvp
Вопрос:
Я пытаюсь разобраться с различными шаблонами (MVP, MVVM и т.д.) И найти тот, который соответствует моим потребностям. После всего прочитанного я все еще не уверен. Надеюсь, кто-нибудь сможет пролить некоторый свет на это для меня.
На данный момент у меня есть WPF View, который реализует интерфейс ICustomView. Этот интерфейс внедрен в мой презентатор. Затем презентатор отвечает за подписку на данные, управление подписками и т.д. Когда данные возвращаются презентатору, он вызывает различные методы для модели (IObservable collection of CustomBusinessObjects). Это делается с использованием интерфейса ICustomView, поскольку IObservable является свойством модели.
Проблема, которую я вижу в этом, заключается в том, что модель слишком связана с представлением. Также презентатор решает, какие методы вызывать для модели. На данный момент представление состоит из сетки WinForms, и она предоставляется ICustomView, позволяющей презентатору вызывать методы для представления. Однако это усиливает связь Presenter и View, что затрудняет замену этой сетки WinForms на сетку или диаграмму WPF и т. Д
Я рассматриваю возможность создания модели как полностью отдельной сущности, скажем, IModel с помощью одного метода ProcessUpdate (тема строки, полезная нагрузка iMessage). Это переместило бы логику из презентатора в модель. Это также означало бы, что более одного представления могут совместно использовать одну и ту же модель. Пользовательская модель могла бы иметь дополнительные интерфейсы для конкретных настроек, но презентатору нужно было бы знать только об IModel.
Звучит ли это как разумная идея? Я что-то здесь упускаю?
Приветствуются любые советы.
Спасибо
Комментарии:
1. WPF или Silverlight = MVVM, ASP.NET = MVP или MVVM
Ответ №1:
Я бы рекомендовал переключиться с MVP на MVVM, потому что вы используете WPF. Я бы использовал MVP только в том случае, если бы вы использовали ASP.Net или WinForms.
При этом ваши объекты MVVM будут:
Модель: простой объект данных. Он не должен содержать никаких функциональных возможностей, таких как сохранение или редактирование, но может иметь логику проверки.
Вид: Ваш пользовательский интерфейс. Обычно я делаю свой в виде DataTemplate для типа класса ViewModel. Он должен быть привязан к свойствам и командам вашей ViewModel.
ViewModel: элемент, объединяющий эти два. Любые данные, отображаемые в представлении, должны быть привязаны к свойству в ViewModel. Любые команды в вашем представлении, такие как нажатия кнопок, также должны указывать на методы в ViewModel.
Например, когда пользователь нажимает кнопку GetCustomer в представлении, ViewModel должна получить команду, перейти и получить CustomerModel и предоставить его свойства для привязки к представлению. Когда пользователь нажимает Сохранить, ViewModel должна подтвердить, что модель допустима, а затем выполнить код сохранения, используя свое свойство CustomerModel.
Ответ №2:
Лично я предпочитаю при использовании WPF использовать сетку данных WPF и привязывать ее к datacontext в шаблоне MVVM. Я думаю, что первое, от чего вам нужно избавиться, это от сетки WinForms (будет практически невозможно отделить вашу модель / представление, пока вы используете сетку WinForms.
Я бы провел исследование по нескольким разным вещам.
- Шаблон MVVM
- WPF DataGrid
- Привязка DataGrid к DataContext
Как только вы дойдете до этого момента, все, что вам нужно будет сделать, это обновить ваш datacontext, и ваше представление обновится вместе с ним.