【问题标题】:WCF multiple data contracts or multiple service contracts representing multiple data model classes?WCF 代表多个数据模型类的多个数据合同或多个服务合同?
【发布时间】:2023-03-10 11:59:01
【问题描述】:

在我的 WPF 应用程序数据模型中,我有多个类表示通过 WCF 自托管服务与后端数据库交互的数据。

我的 WCF 服务中是否应该有多个数据协定或多个服务联系人或端点来表示这些多个 WPF 数据模型类?在这种情况下,构建 WCF 的正确(或者可能是唯一)方法是什么?

【问题讨论】:

    标签: wpf wcf web-services design-patterns datacontract


    【解决方案1】:

    有一个名为Interface Segragation Principle 的设计建议基本上说明了 iDesign WCF 编码标准也说的内容:不要让您的接口(= 您的服务合同)太大太笨重。

    考虑一下:您有一个包含数百种方法的庞大服务合同,而某些第三方想要实现功能的子集,可能只有其中的两个或三个服务方法。如果您有一个巨大的服务合同,他们将不得不实施他们感兴趣的 3-4 服务方法,而所有其他服务方法,他们将不得不存根一个假人 - 例如。 throw new NotImplementedException(); 之类的东西。一般来说,这不是一个好主意。

    所以基本原则应该是:尝试以这样一种方式对您的服务合同进行分组:如果其他人需要实现一个子集,他们很可能会找到一个包含他们需要的所有方法的单一服务合同,而没有别的。尝试按主题对服务合同进行分组,例如如果您有 6 种搜索地址的方法,请将它们放在单独的服务合同中。如果您有 7 种其他方法来插入新地址、更新和删除现有地址 - 这可能应该是一个单独的服务合同(因为您可以想象有人只想搜索地址 - 不修改任何内容)。

    所以我想没有真正的硬性规定什么是好或不好 - 尝试将您的服务分组为“逻辑连接”的方法组。当然,这不是一件容易的事!但值得努力思考其他人可能会如何使用您的服务。

    此外,如果您有一些较小的服务合同,如果您需要更改任何内容,也容易得多。如果您需要在服务合同中引入重大更改,那么只有那些(希望是少数)具有几种方法的特定服务合同的用户会受到影响。如果您总是不得不更改您庞大的 200 方法服务合同,您将始终影响到每个人——这可能不是一件好事!

    【讨论】:

    • 谢谢,马克!所以,据我了解,这都是关于良好的设计考虑,从技术上讲,拥有 200 个方法服务合同没有任何问题,它不会影响性能?
    • 是的。在单个接口上拥有 200 个方法没有性能问题 - 更多的是设计/可维护性问题
    【解决方案2】:

    在 WCF 术语中,数据协定是服务协定操作中使用的类。它被称为数据协定,因为它通常使用DataContractAttribute 进行注释,以便成功识别和序列化(尽管从 .NET 3.5 SP1 开始,DataContractSerializer 与 POCO 对象一起使用并且不再需要此属性)。因此,您可以拥有一个包含多个操作的单一服务契约,这些操作处理多个数据契约,所有这些数据契约都暴露在一个端点中。

    【讨论】:

    • 谢谢你,达林。我也是这么想的。我的疑问是由于此处围绕有关 WCF 的一些最佳实践建议的 SO 讨论引起的,例如(来自 idesign.net “WCF 编码标准”):...(5。)争取每个服务合同拥有三到五个成员。 (6.) 每个服务合同的成员不得超过 20 人。十二可能是实际极限......也许我理解错了。请你清楚我哪里错了吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多