【オブジェクト指向のこころ】13章 エキスパートはどのように設計するのか?(2)
「デザインパターンとともに学ぶオブジェクト指向のこころ」の学習記録。
「第13章 エキスパートはどのように設計するのか?」のまとめ。
【オブジェクト指向のこころ】エキスパートはどのように設計するのか?(1) の続き。
パターンで考える
Bridgeパターンが最年長のパターンということが分かったため、Bridgeパターンが姿を見せるコンテキストまで設計手順を遡る。
このシステムには複数のFeature(抽象的側面)と複数のCAD/CAMシステム(実装)が存在している。
Bridgeパターンの一般構造は以下の通り。
FeatureはAbstraction、V1、V2システムはConcreteImplementorにあたる。
次に、エキスパートシステムとCAD/CAMシステムを関連付けるModelクラスを考える。
Modelの流動的要素は、それの実装のみであるため継承を利用して実現できる。
仮に、Bridgeパターンを使用するとModelクラスは単一となり、Bridgeモドキになってしまう。
ModelがFeatureを保持し次のようになる。
Facadeの適用
v1の実装はV1のFacadeを介してV1システムにアクセスする。
Adapterの適用
V2の実装はAdapterを用いてOOGFeatureを適合させる。
Abstract Factoryの適用
最後にAbstract Factoryの適用を考えるが、この段階になって初めて分かるが、このパターンは今回必要ない。
Abstract Factoryが必要とされる背景は、V1システムの使用時にすべての実装オブジェクトをV1型に、V2システム使用時はV2型に保証するためであった。
こういったことは、Modelオブジェクト自体で実現できる。
オブジェクトの生成規則を簡単にカプセル化できるオブジェクトがあるなら、Abstract Factoryパターンを実装する意味はない。
まとめ
詳細に拘泥(こうでい)し局所的な意思決定に気を取られると、大枠が曇ってしまう。
パターンはこういった曇りを拭い去る言語である。
まず初めに最も大きな枠、つまりシステムのコンテキストを形作るパターンを選択し、次に重要なパターンを追加していくことで、クラスに着目するだけでは達成できなかったアーキテクチャを生み出すことができる。
つまり局所的に洗い出された断片を組み合わせるのではなく、コンテキストによる設計を行うようにする。