質問

ながら設計に私物を見たいの組成により良い選択の視点からtestability.その理由は、できる模擬部品の組成構造の場合で、ユニット。ことはできませんしている場合は、遺産の上位の階層となります。

知りたいと思い場合は他の人も見ることの理由を好む組成物。もうその他のtestability落とし穴好きなので継承した。

役に立ちましたか?

解決

私はより多くのあなたがデザインパターンを使用して開発を始める、あなたは組成物は、継承よりも優先されようとしている場所をより頻繁によりを見つけると信じています。主要な設計原則の一つである「継承にわたりの好意作曲の」デザインパターンの書籍その

:私は実際のヘッドファーストを信じています。

テストのための組成物の一部をモックアップすることができるというあなたの例では、おそらく可能な限り最高の例の一つである。

編集:デザインパターンの基本原理は、それが必要とされる継承を利用パターンがデザインされていないことを意味するものではありません、相続上の構図を優先するようですが。別の基本的な例では、抽象スーパークラス(このタイプのマッチングのためにではなく、「IS-A」の関係を実現するためのものであるが)に向かって符号化されたDecoratorパターン、である。

他のヒント

これは、いずれか、または状況ではありません。彼らは競争相手ではないです。

継承はまた、ユニットテストにかなり容易です。しかし、それは時々、抽象スーパークラスをテストするために、模擬具体的なクラスを必要とします。

の継承が容易に不正に使用することができます。いくつかのデザインは、「ある-A」の状況のように見えるが、実際にはありません - 彼らはもっと微妙です。時にはそれが本当に「振る舞い様」だあなたが他の属性と行動を分離するために(例えば、を戦略)組成物のいくつかの種類を必要とするところます。

に暴力団の デザインパターン 書は基本的にはすべて、なぜ好成分以上継承とには、多くの方法。何らかの理由:

  1. 授業の増加は、複雑さのコードベース

  2. 多くの新しい言語での相続はワンクラスができる構成としていただけます
  3. 基底クラスに変更することはできない実行時(基本的には、問題の背後に何を走り込).

私は、組成物は、テストが容易である最大の理由は、(実装)を継承が単独でテストするより脆い(脆弱基本クラス)と困難です非常に結合されたクラスを作成する傾向があるということだと思います。

の継承は間違いなく、その用途がありますが、私は自分自身がますます頻繁に相続上の組成を好む見つけます。

の "クラスの継承を介してオブジェクト合成を優先" のは、GoF本から実際にあります。 Erich Gamma氏とこのスレッドがブックからこのアイデアを説明します。

継承を要求する一つの重要なパターンは、テンプレートメソッドパターンです。このパターンは広く非常に便利に使用されるので、継承は、ここに滞在することです。継承を使用する他の一般的なパターンがCompositeパターンです。私が作ってみるのポイントは、それがすべてではない割引継承を行うが、私はそれだけでとにかく非常に多くの共通のAPIを見てから明らかに願っています...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top