首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF到WPF - DataContract到Model

WCF到WPF - DataContract到Model
EN

Stack Overflow用户
提问于 2014-06-20 14:28:42
回答 3查看 1.4K关注 0票数 2

这也许是个奇怪的问题,但它对我有点唠叨。

我正在研究WCF服务上的数据域对象与WPF客户端中的数据模型之间的转换。

在我看来,有三个选择:

  1. 在WPF和WCF侧创建对象,并有一个将其中一个转换为另一个的方法。
  2. 创建一个单独的对象,并在两边使用它。
  3. 在WPF端创建一个对象,包装从WCF服务返回的DataContract对象。

然而,我想知道是否有什么我没有预料到的失败。

EN

回答 3

Stack Overflow用户

发布于 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 )的情况下,您只会在代理类周围添加一个额外的模型包装器。

票数 3
EN

Stack Overflow用户

发布于 2014-06-20 14:59:11

通常最好为您的视图定义模型,您可以从WCF数据契约中填充该模型。其中一些好处是:

  1. 您的UI将不依赖于数据契约,它只会对它的模型感兴趣,该模型可以通过任何方式填充。
  2. 您的UI模型可以包含为特定视图服务的计算属性,因此最好将它们与数据契约分开。
票数 1
EN

Stack Overflow用户

发布于 2014-06-20 19:26:32

你在用MVVM吗?我建议让视图模型直接或通过包装器使用数据契约。这将使您能够将视图与数据契约分离开来。视图不应包含对数据契约的任何引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24329613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档