MVVM中的模型是域模型还是POCO?

时间:2016-12-28 13:46:05

标签: wpf mvvm

在WPF应用程序的上下文中,在MVVM模式中使用我的域模型作为模型是否可以?或者模型(在MVVM中)应该是一些POCO?我个人没有看到任何反对使用域模型作为MVVM WPF模式模型的原因。

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

4 个答案:

答案 0 :(得分:2)

  

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

是的,您可以在WPF应用程序中引用您的POCO模型实体类,并将它们包装在实现INotifyPropertyChanged接口的视图模型类中,以提供对动态更改通知的支持。这很好。

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

Correct way to update property in ViewModel from Model

答案 1 :(得分:2)

您可能希望使用视图模型包装域模型对象。视图模型的目的是以对视图有用的方式公开模型中的数据。对于非常简单的应用程序,仅为更改通知添加额外的层可能看起来很麻烦,但随着应用程序变得更加复杂,要绑定视图模型层可以帮助保持模型清洁。如果您正在做一些快速而又脏的事情,那么没有什么可以阻止您直接绑定到您的域模型对象。

答案 2 :(得分:2)

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

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

您所说的域对象和POCO不是 模型,它们是 模型的一部分。您所谈论的模型的视角已经从其他模式(如MVC)中获得,其中数据实体或域对象确实是模型。该模型比MVVM中的模型稍微复杂一些。

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

正如answer from Owen中所提到的,您应该先将您的POCO用viewmodel类包装,然后再将它们提供给UI。您唯一不应该在不需要任何房产更改通知的情况下,也不想在对象上利用任何其他功能(例如,您不需要显示项目上下文菜单。)

答案 3 :(得分:-1)

是的,只要您的域模型实现了inotifypropertychanged,您就可以使用xaml并将其与VM属性绑定