2016-12-28 4 views
1

Можно ли использовать мою модель домена в качестве модели в шаблоне MVVM в контексте приложения WPF? Или модель (в MVVM) должна быть какой-то POCO? Я лично не вижу причины использовать модель домена в качестве модели MVVM-шаблона MVVM.Является ли модель MVVM моделью домена или POCO?

Но тогда XAML элементы будут связываться с чем? Свойства в виртуальной машине, которые под ней отображаются в доменной модели, не так ли?

ответ

2

Чтобы ответить на вопрос, поставленный в заголовке: ни.

В MVVM, «модель», как правило, все, что другая сторона ViewModel (т.е. между ViewModel и хранилище). Модель может (и обычно состоит) состоять из нескольких различных дополнительных архитектур и шаблонов, нормально иметь сервисы, микросервисы, DAL и DIL, модели домена, POCOs/объекты данных и т. Д. Все в рамках «модели».

объекты домена и POCO которые вы говорите, не модель, они часть модель. Перспектива модели, о которой вы говорите, была перенесена из других шаблонов, таких как MVC, где объект данных или объект домена действительно является моделью. Модель немного сложнее, чем в MVVM.

Вы можете связать напрямую с POCO в MVVM, но это не всегда хорошая идея, если она не очень простая, которая не подлежит изменению (например, список поиска, полученный из репозитория). И, как правило, довольно плохая идея связываться с объектами домена, поскольку они будут содержать дополнительные функциональные возможности или информацию, связанную с хранением и извлечением, но это избыток для всего, что показано в пользовательском интерфейсе. Другая проблема с объектами домена заключается в том, что они обычно не сериализуются красиво (если вообще - часто генерируются объекты домена), поэтому, если у вас нет очень простой модели, лучше всего сразу превратить объекты домена в POCOs.

Так, как указано в answer from Owen, вы должны обернуть свои POCOs классами viewmodel, прежде чем они станут доступными для пользовательского интерфейса.Единственный раз, когда вам не нужно, - это когда вам не нужны какие-либо уведомления об изменении свойств, и вы также не хотите использовать какие-либо дополнительные функции для объектов (например, вам не понадобится контекстное меню для отображаемого элемента).

-1

Да, пока ваша модель домена реализует INotifyPropertyChanged вы можете использовать и связать XAML с VM свойствами

+1

Но это то, что DM никогда не будет реализовывать 'inotifypropertychanged'. Поэтому правильнее сказать, что VM * wraps * (Domain) Model, да? –

+0

Если вы используете фреймворк сущности, созданный им Poco для реализации DOM-метода inotify. Даже VM обертывает DM, основные свойства DM должны внедрять inotify – Krishna

1

Но тогда XAML элементы связываются с чем? Свойства в виртуальной машине, которые под ней отображаются в доменной модели, не так ли?

Да, вы можете ссылаться на свои классы объектов модели POCO в своем приложении WPF и обернуть их в класс моделей, реализующих интерфейс INotifyPropertyChanged, чтобы обеспечить поддержку уведомлений о динамических изменениях. Это прекрасно.

Пожалуйста, обратитесь к моему ответу на вопрос ниже для получения дополнительной информации об этом.

Correct way to update property in ViewModel from Model

2

Вы, вероятно, хотите, чтобы обернуть вашу модель домена объекты с видом моделей. Цель вашей модели просмотра - предоставить данные из вашей модели таким образом, который полезен для представления. Для очень простых приложений может показаться громоздким добавить этот дополнительный слой только для уведомления об изменении, но по мере того, как ваше приложение становится более сложным, наличие слоя модели представления для привязки может помочь сохранить вашу модель чистой. Если вы делаете что-то быстро и грязно, нет ничего, что помешает вам напрямую привязываться к объектам модели домена.

Смежные вопросы