【问题标题】:WCF Data Services without generated DTO classes没有生成 DTO 类的 WCF 数据服务
【发布时间】:2013-11-29 20:45:37
【问题描述】:

我正在规划我的第一个 N 层架构,目前正在考虑如何最好地利用 WCF 数据服务。它看起来是一个很好的工具,只是我对客户端生成的数据契约类并不感兴趣。在将更改发送回服务器之前,我不喜欢需要像 AutoMapper 这样的另一个工具来将修改后的域对象投影到 DTO 中。 WCF 数据服务似乎不需要这些生成的 DTO 类。似乎可行的是,它可以改为为我提供一种将更改跟踪信息(即增量)以一般形式发送回服务器的方法。

实际上有没有一种方法可以在没有客户端生成的 DTO 类的情况下利用 WCF 数据服务的更改跟踪功能?

【问题讨论】:

  • 但是如果客户端没有传递 DTO 中的更改,您的数据服务如何知道更改了什么?
  • @JericoSandhorn - 我稍微澄清了这个问题。

标签: wcf wcf-data-services n-tier-architecture


【解决方案1】:

您可以使用WCF Proxies,它有助于在没有 DTO 的情况下构建 wcf 服务..

看这个例子:http://www.codeproject.com/Articles/786601/Ways-to-generate-proxy-for-WCF-Service

【讨论】:

    【解决方案2】:

    我认为要做你想做的事,你必须自己在客户端实现 OData REST 协议,例如使用 Atom XML 或 JSON(两者都支持)。

    但是,如果您对此持开放态度,我建议您考虑使用基本的 WCF 数据合同和服务合同,并在各层之间定义您自己的完美服务接口,而不是将其与您的数据模型过于紧密地耦合。 Microsoft 可以轻松地将您的实体模型公开给其他层以进行快速开发,但这可能会带来一些严重的缺点。例如,更改您的实体模型可能会导致其他层发生不良向上变化。我的团队一开始就是这样,很快就遇到了问题,所以最后我们选择花更多的时间来定义层之间的确切合同,为我们的业务对象建模,然后以我们想要的任何方式实现数据库持久性。例如,我们从 Entity Framework 移出,并切换到 Dapper.NET,而无需更改服务的其他客户端。

    即使使用 WCF 数据协定,当您创建对服务的服务引用时,您最终仍可能会生成客户端协定。但是你可以通过共享你的数据契约 DLL 来避免这种情况,这样客户端和服务器就可以拥有完全相同的类并且没有重复。我只会建议如果您的项目都在同一个 SDLC 下。

    您必须做出的权衡之一是在保持跨层数据对象的转换以实现灵活性之间做出选择,或者使用更少的代码将所有层紧密耦合在同一个模型上。

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多