コンポジションの基本原則
メニューを表示するにはスワイプしてください
コンポジションは、より複雑なオブジェクトを、より単純で独立したコンポーネントを組み合わせて構築することに重点を置く手法。継承のように厳格な階層構造を作るのではなく、コンポジションではクラスが内部に持つオブジェクトを通じて協調することができる。このアプローチにより、システムはより柔軟で、モジュール化され、保守が容易になる。なぜなら、コンポーネントを入れ替えたり拡張したりしても、全体の構造を壊すことなく対応できるためである。
example.py
Orderは支払い、在庫、配送のロジック自体を実装しない。
代わりに、個別のオブジェクト(Payment、Inventory、Shipping)を持ち、それらを利用して処理を完了する。
各コンポーネントは一つの責任のみを持ち、Orderはそれらを調整する役割のみを担う。
支払いや配送の仕組みを変更したい場合は、Orderクラスを修正せずにコンポーネントを差し替えることができる。
コンポジションを利用する際の注意点としては、あまりに多くのコンポーネントを集約して管理が困難になるゴッドオブジェクトの生成、外部クラスを通じてコンポーネントのAPIが漏れ出しインターフェースが煩雑になること、コンポーネント同士が内部の詳細に過度に依存し隠れた結合が生じることなどが挙げられる。
ゴッドオブジェクトは多くのことをやりすぎようとします。多数のコンポーネントを保持し、多くの責任を担うため、そのクラスは理解・テスト・保守が困難になります。
外側のクラスが、そのコンポーネントの内部メソッドや属性を公開してしまう場合に発生します。独自の明確なインターフェースを提供せず、ユーザーに内部オブジェクトへ直接アクセスさせてしまいます。
コンポーネント同士が内部の詳細で密接に結びついてしまいます。一部を変更すると、他の部分が予期せず壊れることがあり、明確な契約ではなく内部構造に依存しているためです。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください