「構成階層」が問題でない場合はおApびしますが、質問でそれが何を意味するのかを説明します。
「継承階層をフラットに保つ」や「継承よりも合成を優先する」などのバリエーションに遭遇していないオブジェクト指向プログラマーはいません。ただし、深い構成階層にも問題があるようです。
実験の結果を詳述するレポートのコレクションが必要だとしましょう:
class Model {
// ... interface
Array<Result> m_results;
}
各結果には特定のプロパティがあります。これらには、実験の時間と、実験の各段階からのメタデータが含まれます。
enum Stage {
Pre = 1,
Post
};
class Result {
// ... interface
Epoch m_epoch;
Map<Stage, ExperimentModules> m_modules;
}
いいですね 現在、各実験モジュールには、実験の結果を説明する文字列と、実験サンプルセットへの参照のコレクションがあります。
class ExperimentalModules {
// ... interface
String m_reportText;
Array<Sample> m_entities;
}
そして、各サンプルには...まあ、あなたは絵を取得します。
問題は、アプリケーションドメインのオブジェクトをモデリングしている場合、これは非常に自然なフィットのように思えますが、結局のところ、a Result
は単なるデータの無意味なコンテナです!それのためにクラスの大きなグループを作成することは価値がないようです。
上記のデータ構造とクラスがアプリケーションドメインの関係を正しくモデル化すると仮定すると、深い構成階層に頼ることなく、そのような「結果」をモデル化するより良い方法はありますか?そのようなデザインが良いデザインかどうかを判断するのに役立つ外部コンテキストはありますか?