GRASP
質問:オブジェクトに責務を割り当てる原則とは何か?
回答:その責務を全うするのに必要な情報を持つクラスに割り当てるべきである。
このパターンは、オブジェクトに責務を割り当てる際の一般的な原則である。情報エキスパートパターンは、情報のエキスパート、すなわち必要な情報を全て持っているクラスに責務を割り当てるべきとする。この原則は、ソフトウェアシステムにおいての責務と演算を集中させない(Big ball of mudとは対照的である)。責務と意思決定の分散が進むと情報の隠蔽化が促進され、他のクラスと情報エキスパートクラスの実装との結合の度合いが小さくなる。情報エキスパートパターンを適切に使いこなしたシステムは理解しやすく、維持・拡張が簡単で、また将来の開発で再利用できる可能性が高まる。マーティン・ファウラーは、Web の記事 「GetterEradicator」でラーマンの情報エキスパートを参照している。
質問:どういったオブジェクトに責務を割り当てると、オブジェクトたちの密結合を回避できるのか?どのようにオブジェクトを切り離せば、リユーザブルな疎結合を実現できるのか?
回答:オブジェクト同士が直接つながらないように、コンポーネントまたはサービスを仲介する中間オブジェクトを用意して、それに責務を割り当てるべきである。
このパターンは、二つの要素の中間にオブジェクトを設け両者の仲介を行う責務を割り当てることで、二つの要素間の疎結合性(および再利用の可能性)を促進する。Model View Controllerにおいてコントローラがデータ(モデル)と表現(ビュー)の仲介を行うのはその一例と言える。