我应该避免WCF中的消息继承吗?

问题描述:

通常,我尝试避免在WCF合约中使用继承,宁愿组合。我应该避免WCF中的消息继承吗?

但在下列情况下...

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

我看到我的选项之中:

  1. 有一个包含一切,当性能是不相关的,它们被保留为空单的响应消息的合同。然后客户端必须查看bool/enum来查看其ResultA或ResultB并相应地忽略属性。
  2. 有2个响应消息合约,都从共享基地继承。一个表示ResultA及其相关属性,另一个表示ResultB及其相关属性。

我更喜欢选择2的原因有很多,但它打破了继承规则的构成。

人们会怎么想?

所有规则都打算打破。如果您正在重复使用对象,并且系统允许您使用继承...为什么不使用它?正如Phil Haack所说......为自己思考。

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

Prefer Composition Over Inheritance (Steve Rowe)这是另一个角度。但如果你阅读它,他正在谈论的是重用函数,而不是数据。

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

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

比继承更喜欢构图!=从不使用继承:-)