ドメイン駆動設計とデザインパターン
貨物予約アプリケーションの例より
ポリシーとは、ストラテジーとして知られている設計パターンの別名だ。通常、このパターンが使われるのはルールを置き換える必要のある場合だが、現時点でわかっている限り、その必要はない。しかし、ここでとらえようとしている概念は、ポリシーの意味と適合している。このこともまた、ドメイン駆動設計では重要な動機となる。(第一部 第一章 より)
オブジェクト指向といえば、デザインパターンとばかりに、研修・講習で教えられるが、ドメイン駆動設計においては、注意をしないといけないです。
あくまで、デザインパターンでで出てくる動機やパターンの内容は技術的なものとして説明されています。
適用できる状況だからと考えなしに使用しても、より複雑になるだけだったりするし、パターンを知らない人が読んでわからないソースコードになったりしますよね。
(なので、私個人の見解ですが、新人さんや、オブジェクト指向初心者に何の考えもなしに技術的側面だけのデザインパターンを教えるのにはちょっと反対です・・・)
ドメイン駆動設計でのデザインパターンとの付き合い方は、ドメインの深い概念と一致するか、ドメインの問題に適用できるかを考慮して使うことになります。
また、概念がきちんと適用されるのならば、例えばストラテジーパターンをルールの置き換えの必要なしに利用することもありえます。その方がドメインの概念として自然だからです。
この点から、なんでもかんでもデザインパターンを適用するのではなく、どこが重要で、重要な箇所以外をいかに最小限に実装するかは常に考慮しなければいけませんね。
こうした手の込んだ設計をドメインのあらゆる詳細に適用することを推奨しているわけではない(第一部 第一章 より)
デザインパターンとの付き合い方を考えよう!