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

时间:2009-10-12 10:47:22

标签: wcf inheritance message contract

通常,我尝试避免在WCF合同中使用继承,而不是使用合成。

但在下列情况下......

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

我认为我的选择是:

  1. 拥有一个包含所有内容的响应消息合同,当属性不相关时,它们将保留为null。然后客户端必须查看bool / enum以查看其ResultA或ResultB并相应地忽略属性。
  2. 有2个响应消息合同,都来自共享基础。一个代表ResultA及其相关属性,一个代表ResultB及其相关属性。
  3. 由于多种原因,我更倾向于选项2,但它打破了继承规则的构成。

    人们的想法是什么?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

所有规则都应该被打破。如果您正在重用对象,系统允许您使用继承...为什么不使用它?正如Phil Haack所说的那样......为自己思考。

通过一系列人为规则限制自己是一种让你工作更困难的好方法。我们有理由可以使用继承,我说这是其中之一。

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

答案 2 :(得分:0)

首选组合而不是继承!=永远不要使用继承: - )