【问题标题】:WCF to WPF - DataContract to Model [closed]WCF 到 WPF - DataContract 到模型 [关闭]
【发布时间】:2014-06-20 14:28:42
【问题描述】:

这可能是一个奇怪的问题,但它一直在唠叨我。

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

在我看来,有三种选择:

  1. 在 WPF 和 WCF 双方创建对象,并有一个方法可以将一个对象转换为另一个对象。
  2. 创建一个对象,并在两侧使用它。
  3. 在 WPF 端创建一个对象,该对象环绕从 WCF 服务返回的 DataContract 对象。

现在我赞成 1。但是我想知道是否有任何我没有预见到的垮台。

【问题讨论】:

  • 如果您选择#1,AutoMapper 是您的朋友。这就是我上次遇到这个问题时使用的。 :)
  • #3 总是比 #2 更上一层楼。当 DTO 已经实现 INPC 时最有用。

标签: c# wpf wcf


【解决方案1】:

这是“模型类”“Prism 5 for WPF”第81页的摘录:

通常,模型代表应用程序的客户端域模型。它可以根据应用程序的数据模型以及任何支持的业务和验证逻辑来​​定义数据结构。该模型还可能包括支持数据访问和缓存的代码,尽管通常为此使用单独的数据存储库或服务。通常,模型和数据访问层是作为数据访问或服务策略的一部分生成的,例如 ADO.NET 实体框架、WCF 数据服务或 WCF RIA 服务。

通常,模型实现了可以轻松绑定到视图的工具。这通常意味着它通过 INotifyPropertyChanged 和 INotifyCollectionChanged 接口支持属性和集合更改通知。表示对象集合的模型类通常派生自 ObservableCollection 类,该类提供 INotifyCollectionChanged 接口的实现。

模型还可以通过 IDataErrorInfo(或 INotifyDataErrorInfo)接口支持数据验证和错误报告。 IDataErrorInfo 和 INotifyDataErrorInfo 接口允许在值更改时通知 WPF 数据绑定,以便更新 UI。它们还支持 UI 层中的数据验证和错误报告。

如果您的模型类没有实现所需的接口怎么办?

有时您需要使用未实现 INotifyPropertyChanged、INotifyCollectionChanged、IDataErrorInfo 或 INotifyDataErrorInfo 接口的模型对象。在这些情况下,视图模型可能需要包装模型对象并将所需的属性公开给视图。这些属性的值将由模型对象直接提供。视图模型将为它公开的属性实现所需的接口,以便视图可以轻松地将数据绑定到它们。

我从中得知,Word From On High 介于 #1(直接使用它们)和 #3(使用包装器)之间,其中 WCF 代理类是模型,包装器类是您的视图模型。根据 MVVM 模式,Model(代理)类应该封装业务逻辑,而 View Model 类应该封装代理类并包含表示逻辑。

只有在您需要代理类支持额外接口(例如IDataErrorInfo)的情况下,您才需要在代理类周围添加额外的模型包装器。

【讨论】:

    【解决方案2】:

    通常最好为从 WCF 数据协定填充的视图定义模型。一些好处:

    1. 您的 UI 将不依赖于数据协定,它只会对可以通过任何方式填充的模型感兴趣。

    2. 您的 UI 模型可以包含用于服务特定视图的计算属性,因此最好将它们与数据协定分开。

    【讨论】:

    • 这是我的想法,我的模型包含我的 WCF 不关心的代码。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2011-08-03
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多