2009-10-12 53 views
1

通常,我嘗試避免在WCF合約中使用繼承,寧願組合。我應該避免WCF中的消息繼承嗎?

但在下列情況下...

  • 我有可能會導致兩件事情之一服務操作:ResultA和ResultB。
  • 響應消息中有一個布爾值/枚舉來報告此結果。
  • 響應消息中還有許多其他屬性。其中一些只與ResultA相關,有些只與ResultB相關。

我看到我的選項之中:

  1. 有一個包含一切,當性能是不相關的,它們被保留爲空單的響應消息的合同。然後客戶端必須查看bool/enum來查看其ResultA或ResultB並相應地忽略屬性。
  2. 有2個響應消息合約,都從共享基地繼承。一個表示ResultA及其相關屬性,另一個表示ResultB及其相關屬性。

我更喜歡選擇2的原因有很多,但它打破了繼承規則的構成。

人們會怎麼想?

回答

0

所有規則都打算打破。如果您正在重複使用對象,並且系統允許您使用繼承...爲什麼不使用它?正如Phil Haack所說......爲自己思考。

通過一套人爲規則來限制自己是讓你工作更加困難的好方法。我們可以使用繼承是有原因的,我說這是其中之一。

Prefer Composition Over Inheritance (Steve Rowe)這是另一個角度。但如果你閱讀它,他正在談論的是重用函數,而不是數據。

2

我的直覺就是「重新設計你的界面」。具有可疑返回類型的方法通常不是良好設計的標誌。這會導致方法的每個調用者都會出現大量不必要且容易出錯的邏輯。

所以我會建議「祕密選項編號3」:將接口重構爲兩個獨立的方法。

0

比繼承更喜歡構圖!=從不使用繼承:-)