【问题标题】:Should I avoid message inheritance in WCF?我应该避免 WCF 中的消息继承吗?
【发布时间】:2009-10-12 10:47:22
【问题描述】:

一般来说,我尽量避免在 WCF 合同中使用继承,更喜欢组合。

但是在以下情况下……

  • 我的服务操作可能会导致以下两种情况之一:ResultA 和 ResultB。
  • 响应消息中有一个布尔值/枚举来报告此结果。
  • 响应消息中还有许多其他属性。其中一些仅在 ResultA 事件中相关,而一些仅在 ResultB 事件中相关。

我认为我的选择是:

  1. 拥有一个包含所有内容的单一响应消息协定,当属性不相关时,它们将保留为空。然后,客户端必须查看 bool/enum 以查看其 ResultA 还是 ResultB 并相应地忽略属性。
  2. 有 2 个响应消息合同,都继承自一个共享基础。一个代表 ResultA 及其相关属性,一个代表 ResultB 及其相关属性。

出于多种原因,我更喜欢选项 2,但它打破了组合优于继承的规则。

人们怎么看?

【问题讨论】:

    标签: wcf inheritance message contract


    【解决方案1】:

    我的直觉是“重新设计你的界面”。具有可疑返回类型的方法通常不是良好设计的标志。这会导致该方法的每个调用者出现大量不必要且容易出错的逻辑。

    所以我建议“秘密选项 3”:将接口重构为两个单独的方法。

    【讨论】:

      【解决方案2】:

      所有规则都是为了打破。如果您正在重用对象并且系统允许您使用继承......为什么不使用它呢?正如Phil Haack 所说的那样……你自己想想吧。

      通过一套人为的规则来限制自己是让你工作变得更加困难的好方法。我们可以使用继承是有原因的,我说这就是其中之一。

      Prefer Composition Over Inheritance (Steve Rowe)这里换个角度。但是,如果您阅读它,他说的是功能的重用,而不是数据的重用。

      【讨论】:

        【解决方案3】:

        更喜欢组合而不是继承!= 永远不要使用继承 :-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-26
          • 2010-09-29
          • 1970-01-01
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多