私はすべて単一のインタフェースを実装する小さなC++クラスのセットを設計しています。インターフェイスをIHandler
としましょう。 1つの方法しかありません。データメンバを保持するためだけに親クラスを導入する必要がありますか?
Googleのドメイン内の各タイプごとに1つのハンドラがあります。 FooHandler
、BarHandler
などとしましょう。PassiveHandler
もありますが、これは何もしません(これは、処理する必要のないドメインオブジェクトに使用されます)。
だから、私たちの階層が素晴らしく、このようなフラットになります:
IHandler
|-PassiveHandler
|-FooHandler
|-BarHandler
| (...)
|-BazHandler
しかし、すべてのハンドラはのはdomainObject
それを呼びましょう、データメンバを必要とするので、私はちょうどこれを保持している共通のスーパークラスHandler
を抽出について考えましたオブジェクト。
PassiveHandler
以外のすべてのハンドラは、2番目のデータメンバーが必要です。それをinfoObject
としましょう。このオブジェクトを保持する別の共通スーパークラスActiveHandler
を抽出することを考えました。今度は階層構造の見直しが進んでいますが、重複を取り除いています。
IHandler
|-Handler
| |-PassiveHandler
| |-ActiveHandler
| |-FooHandler
| |-BarHandler
| | (...)
| |-BazHandler
あなたはdomainObject
メンバ宣言は、すべてのクラスで重複しているの浅い設計、一緒に行く、そして最もにおけるinfoObject
メンバ宣言しませんか?または、重複が削除されるより複雑な階層を好むでしょうか?これらのデータメンバーのためだけに価値がありますか?
(+1) "PassiveHandler"(ヌルオブジェクト/ヌルメソッドデザインパターン)を追加する場合、時には "0"が多くを意味します... – umlcat