リポジトリ
冒頭のおばさんの写真は図書館の司書ってことでいいんですよね。。。(もちろんリポジトリのメタファ)
オブジェクトの参照の手に入れ方
すごく、とてもすごく当然のことだけど、オブジェクトを使って何かしようとするならば、そのオブジェクトの参照をもっていなければならない。それをどう手に入れるか?
1. オブジェクトを生成する
2. 既に持っているオブジェクトの関連を辿る
Evansのこのあとの体験が面白いのですが、すべてのオブジェクトを上記1,2のやり方だけで対応しようとしていたプロジェクトがあったと。なかなか興味をそそられるプロジェクトですよね。
ただ、Evansも言っているように、一般的には、ほとんどのオブジェクトをRDBに格納する。よって、3つ目の方法が必要となります。
3.クエリを実行して、データベース内でオブジェクトを見つける。または、オブジェクトの各構成要素を見つけて、再構成する。
関連と検索
上記3の方法が出てくると、設計において考えるべき点ができる。
例えば、"顧客オブジェクト"は"注文のすべてのコレクション"を保持して、関連で辿れるようにすべきか、注文はデータベースに入れて、顧客IDで検索すべきか?
これは、検索の疎結合と関連の高凝集との間のトレードオフを考えて決定すべき。いずれにしても、検索と関連を組み合わせることで、設計はわかりやすくなります。
格納されたオブジェクトはライフサイクル上"中期"
格納されたオブジェクトを取り出す場合、前回読んだようにオブジェクトを組み立てる必要があります。なので、格納された時点でオブジェクトは消えてしまうように見えますが、**概念上は、エンティティのライフサイクル上、"中期"**であることを忘れないようにしたいです。
例えば、新規の顧客をRDBに格納しても、当然、顧客は退会していなくなるわけではないですよね。
なので、格納されたオブジェクトを取り出すことを再構成すると呼んでいます。
ドメイン駆動設計の目標は、技術ではなく、ドメインについてのモデルに焦点を合わせることによって、よりよいソフトウェアを作ることである。(第二部第六章より)
この後、何回かに分けてリポジトリの章を読みますが、まずこの大前提を忘れないようにしたいですね。