Chapter 9 - Practical Object Oriented Design in Ruby

Combining Object with Composition

まとめ

1つのオブジェクトを複数のオブジェクトで構成するという話。

自転車オブジェクトがPartsオブジェクト持つという例で、sparesのようなPartsオブジェクトが返答すべきメッセージは内部でPartsオブジェクトへ処理を委譲する。

外から見たら同じだけど、内部を複数のオブジェクトに分割、管理することで、SRPに基づいた設計ができ、再利用性や拡張に対して柔軟な設計となりやすくなる。

複数のオブジェクトから構成されるオブジェクトは、初期化処理が複雑になりがち。

そういった場合はFactoryパターンを活用すると、オブジェクト生成に関する知識を1つの場所に収めることができる。

is-a, has-a, behaves-like-a のどの関係性がふさわしいか、それぞれの実装のinheritance, composition, duck types(module) が持つ長所、短所を理解して判断する必要がある。

これらの判断は、情報が少ない開発初期の段階では間違いがちなので、それを受け入れて正しく修正して心構えが大事。 初期の実装にひきづられずに、情報が増えてきた際に正しく判断し、リファクタリングをしていく。