2011-06-09
■[DDD]ドメイン駆動設計・モデル「深」化編・副作用のない関数
SIDE-EFFECT-FREE-FUNCTIONS
プロシージャよりファンクション
俯瞰図
所属するストーリの俯瞰図です。
どういうこと?
操作の呼び出しによって、オブジェクトの状態が変化することを「副作用」と言います。副作用を伴う操作を「コマンド」といい、「プロシージャ」として実現されます。副作用を伴わない操作を「クエリ」といい、「ファンクション(関数)」として実現されます。
「コマンド」が複雑に組み合わさって行くと、プログラムの振る舞いを理解するのが極端に難しくなってしまいます。できる限り「クエリ」操作を作成し、「コマンド」操作を必要最小限にとどめるようにします。
| 操作の種類 | 実現方法 | 説明 |
|---|---|---|
| コマンド | プロシージャ | オブジェクトの状態を変化させる。(=副作用がある) |
| クエリ | ファンクション | オブジェクトの状態を変化させない。(=副作用がない) |
どうして?
複数のルール間に存在する相互作用や、演算の合成は、予測するのが極端に困難になります。
操作を呼び出す開発者は、結果を予想するために、呼び出し先の実装とそれが委譲する実装をすべて理解しなければなりません。開発者がインタフェースによって隠されたものを見る必要があるなら、そのインタフェースによる抽象化の効用は限定されていることになります。
安全に予測できるように抽象化されていないと、開発者は組み合わせの爆発を制御しなければならなくなります。これでは、現実に構築できるふるまいの豊かさを制限されることになってしまいます。
どうすれば?
ファンクション指向
プログラムロジックのうち、できる限り多くの部分をファンクションに置きます。コマンドは厳密に分離して、ドメインについての情報を戻さない、非常に単純な操作にします。
値オブジェクト指向
ある概念が、値オブジェクトの担う責務に合致する場合には、複雑なロジックをその値オブジェクトに移すことによって、副作用を制御できます。
同パターン
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 269回
- この商品を含むブログ (120件) を見る
関連
- 9 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/asakichy/20100207/1265498408&rct=j&q=Eclipse ショートカット 作成&ei=OBvwTZymJIWKvgOAmty
- 6 http://search.hatena.ne.jp/websearch?word=エリック+ドメイン駆動設計&site=d.hatena.ne.jp&from=
- 4 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBwQFjAA&url=http://d.hatena.ne.jp/asakichy/20091117/1258428226&rct=j&q=プログラミング Constant&ei=Qj3wTd-XK5GgvQO5wvSPCQ&usg=AFQjCNHE9O1Q
- 4 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCMQFjAB&url=http://d.hatena.ne.jp/asakichy/20110323/1300849965&rct=j&q=カプセル化 はてな&ei=qcrwTYmZOIe2vwO3i6GlBA&usg=AFQjCNFSIw8
- 4 http://www.google.com/reader/view/
- 3 http://a.hatena.ne.jp/chigurihaguri/?gid=272159
- 3 http://d.hatena.ne.jp/tacohachi/
- 3 http://reader.livedoor.com/reader/
- 3 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&source=hp&biw=1126&bih=640&q=composite+暗黙 ツリー 構造&lr=&btnG=Google+検索
- 3 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCAQFjAB&url=http://d.hatena.ne.jp/asakichy/20091007/1254888424&rct=j&q=valueobjectとは&ei=nRPwTdK1JY-OvQO_l9CPCQ&usg=AFQjCNHOmcpICFkOChZvUkh9ZG6VaRiUWg


