LoginSignup
1
0

More than 5 years have passed since last update.

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第六章 ドメインオブジェクトのライフサイクル7(リポジトリ)

Last updated at Posted at 2017-10-14

リポジトリ

冒頭のおばさんの写真は図書館の司書ってことでいいんですよね。。。(もちろんリポジトリのメタファ)

オブジェクトの参照の手に入れ方

すごく、とてもすごく当然のことだけど、オブジェクトを使って何かしようとするならば、そのオブジェクトの参照をもっていなければならない。それをどう手に入れるか?

1. オブジェクトを生成する
2. 既に持っているオブジェクトの関連を辿る

Evansのこのあとの体験が面白いのですが、すべてのオブジェクトを上記1,2のやり方だけで対応しようとしていたプロジェクトがあったと。なかなか興味をそそられるプロジェクトですよね。

ただ、Evansも言っているように、一般的には、ほとんどのオブジェクトをRDBに格納する。よって、3つ目の方法が必要となります。

3.クエリを実行して、データベース内でオブジェクトを見つける。または、オブジェクトの各構成要素を見つけて、再構成する。

関連と検索

上記3の方法が出てくると、設計において考えるべき点ができる。

例えば、"顧客オブジェクト"は"注文のすべてのコレクション"を保持して、関連で辿れるようにすべきか、注文はデータベースに入れて、顧客IDで検索すべきか?

これは、検索の疎結合と関連の高凝集との間のトレードオフを考えて決定すべき。いずれにしても、検索と関連を組み合わせることで、設計はわかりやすくなります。

格納されたオブジェクトはライフサイクル上"中期"

格納されたオブジェクトを取り出す場合、前回読んだようにオブジェクトを組み立てる必要があります。なので、格納された時点でオブジェクトは消えてしまうように見えますが、概念上は、エンティティのライフサイクル上、"中期"であることを忘れないようにしたいです。

例えば、新規の顧客をRDBに格納しても、当然、顧客は退会していなくなるわけではないですよね。
なので、格納されたオブジェクトを取り出すことを再構成すると呼んでいます。

ドメイン駆動設計の目標は、技術ではなく、ドメインについてのモデルに焦点を合わせることによって、よりよいソフトウェアを作ることである。(第二部第六章より)

この後、何回かに分けてリポジトリの章を読みますが、まずこの大前提を忘れないようにしたいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0