这也许是个奇怪的问题,但它对我有点唠叨。
我正在研究WCF服务上的数据域对象与WPF客户端中的数据模型之间的转换。
在我看来,有三个选择:
然而,我想知道是否有什么我没有预料到的失败。
发布于 2014-06-20 16:17:19
这是摘录自"Prism 5 for WPF“第81页的”模型类“
通常,该模型表示应用程序的客户端域模型。它可以基于应用程序的数据模型和任何支持业务和验证逻辑定义数据结构。模型还可能包含支持数据访问和缓存的代码,尽管通常为此使用单独的数据存储库或服务。通常,模型和数据访问层是作为数据访问或服务策略(如ADO.NET实体框架、或)的一部分生成的。 通常,模型实现了使绑定到视图更容易的工具。这通常意味着它通过INotifyPropertyChanged和INotifyCollectionChanged接口支持属性和集合更改通知。表示对象集合的模型类通常来自ObservableCollection类,后者提供了INotifyCollectionChanged接口的实现。 该模型还可以通过IDataErrorInfo (或INotifyDataErrorInfo)接口支持数据验证和错误报告。IDataErrorInfo和INotifyDataErrorInfo接口允许在值更改时通知WPF数据绑定,以便更新UI。它们还支持UI层中的数据验证和错误报告。 如果您的模型类没有实现所需的接口,那么怎么办? 有时,您需要处理不实现INotifyPropertyChanged、INotifyCollectionChanged、IDataErrorInfo或INotifyDataErrorInfo接口的模型对象。在这些情况下,视图模型可能需要包装模型对象并向视图公开所需的属性。这些属性的值将直接由模型对象提供。视图模型将为它公开的属性实现所需的接口,以便视图可以轻松地将数据绑定到它们。
从这里我可以了解到,On这个词介于#1 (直接使用它们)和#3 (使用包装器)之间,其中WCF代理类是Model,包装类是您的视图模型。按照MVVM模式,Model ( proxy )类应该封装业务逻辑,而View类应该封装代理类并合并表示逻辑。
在需要代理类支持额外接口(如IDataErrorInfo )的情况下,您只会在代理类周围添加一个额外的模型包装器。
发布于 2014-06-20 14:59:11
通常最好为您的视图定义模型,您可以从WCF数据契约中填充该模型。其中一些好处是:
发布于 2014-06-20 19:26:32
你在用MVVM吗?我建议让视图模型直接或通过包装器使用数据契约。这将使您能够将视图与数据契约分离开来。视图不应包含对数据契约的任何引用。
https://stackoverflow.com/questions/24329613
复制相似问题