1

一般的に、私は WCF コントラクトで継承を使用することを避け、コンポジションを優先します。

しかし、次の状況では...

  • ResultA と ResultB のいずれかになるサービス操作があります。
  • この結果を報告するために、応答メッセージにブール値/列挙型があります。
  • 応答メッセージには、他にも多くのプロパティがあります。これらのいくつかは ResultA のイベントにのみ関連し、一部は ResultB のイベントにのみ関連します。

私の選択肢は次のとおりです。

  1. すべてを含む単一の応答メッセージ コントラクトを用意し、プロパティが関連しない場合は null のままにします。次に、クライアントは bool/enum を調べて、その ResultA または ResultB を確認し、それに応じてプロパティを無視する必要があります。
  2. 2 つの応答メッセージ コントラクトを持ち、両方とも共有ベースから継承します。1 つは ResultA とその関連プロパティを表し、もう 1 つは ResultB とその関連プロパティを表します。

私はいくつかの理由からオプション 2 を好みますが、継承よりも合成の規則に違反しています。

人々はどう思いますか?

4

3 に答える 3

2

ここでの私の直感は、「インターフェイスを再設計する」ことです。疑わしい戻り値の型を持つメソッドを持つことは、通常、優れた設計の兆候ではありません。これにより、メソッドのすべての呼び出し元で、多くの不必要でエラーが発生しやすいロジックが発生します。

したがって、「秘密のオプション番号 3」を提案します。インターフェイスを 2 つの別々の方法にリファクタリングします。

于 2009-10-12T11:11:09.063 に答える
0

継承よりも構成を優先する!= 決して継承を使用しないでください :-)

于 2009-10-12T21:37:11.557 に答える
0

すべてのルールは破るためにある。オブジェクトを再利用していて、システムで継承の使用が許可されている場合...それを使用しないのはなぜですか? Phil Haackが言うように...自分で考えてください。

人為的なルールのセットによって自分自身を制限することは、作業をより困難にする優れた方法です。継承を使用できるのには理由があり、これはその 1 つです。

継承より構成を優先する (Steve Rowe) 別の角度から説明します。しかし、あなたがそれを読んだ場合、彼はデータではなく関数の再利用について話している.

于 2009-10-12T11:01:31.197 に答える