2016-12-28 50 views
1

在MVVM模式中,在WPF应用程序的上下文中将我的领域模型用作模型是否可行?还是模型(在MVVM中)应该是一些POCO?我个人认为没有任何理由反对使用域模型作为MVVM WPF模式的模型。MVVM中的模型是域模型还是POCO?

但是那么XAML元素会绑定什么?虚拟机中的属性映射到域模型,对吗?

回答

2

要回答标题中提出的问题:既不。

在MVVM中,“模型”通常是视图模型另一侧(即视图模型和存储库之间)的所有内容。该模型可以(并且通常)由几种不同的附加体系结构和模式组成,在“模型”中有服务,微服务,DAL和DIL,领域模型,POCO /数据实体等是正常的。

你说话的域对象和波苏斯不模型,它们的部分模型。您所谈论的模型的观点已经从其他模式(如MVC)中引入,其中数据实体或域对象确实是模型。该模型比MVVM中的模型稍微复杂一些。

您可以直接绑定到MVVM中的POCO,但它通常不是一个好主意,除非它是非常简单的一个不会更改(如源自存储库的查找列表)。绑定到域对象通常是一个坏主意,因为它们将包含与存储和检索相关的额外功能或信息,但对UI中显示的任何内容都是过度的。域对象的另一个问题是它们通常不会很好地序列化(如果有的话 - 通常会生成域对象),所以除非您有一个非常简单的模型,否则最好尽快将域对象转换为POCO。

因此,如answer from Owen中所述,您应该先将视点模型类包装到POCO中,然后才能将它们提供给UI。唯一不应该在的时候不需要任何属性更改通知,而且您也不希望利用对象上的任何其他功能(例如,在显示的项目上不需要上下文菜单)。

-1

是,只要你的域模型实现INotifyPropertyChanged,你可以使用和VM性能

+1

但就是这样 - DM永远不会执行'inotifypropertychanged'。因此,说VM *包装(域)模型是更正确的,是的? –

+0

如果使用实体框架,由它为DM创建的Poco实现inotify。即使VM包装DM,DM的基础属性也应实现inotify – Krishna

1

但随后的XAML元素将绑定到什么绑定XAML?虚拟机中的属性映射到域模型,对吗?

是的,你可以参考你的POCO模型实体类的WPF应用程序,并实现了INotifyPropertyChanged接口,提供动态变化的通知的支持视图模型类包装他们。这很好。

有关详细信息,请参阅我对以下问题的回答。

Correct way to update property in ViewModel from Model

2

您可能会想包装与视图模型的领域模型对象。您的视图模型的目的是以对视图有用的方式显示模型中的数据。对于非常简单的应用程序来说,为改变通知添加额外的层似乎很麻烦,但随着应用程序变得更加复杂,让视图模型层绑定可以帮助保持模型清洁。如果你正在做一些快速和肮脏的事情,没有什么能阻止你直接绑定到你的领域模型对象。