Repositoryの単位
Repositoryの単位とは
Repositoryは、ドメインモデルから見たAggregateの取得・保存を表す仕組みです。DBテーブルを操作するための共通CRUDではなく、永続化されたAggregateを復元し、変更結果を保存します。
RepositoryはAggregateごとに作る?
推奨
永続化が必要なAggregate RootごとにRepositoryを用意し、内部Entity用のRepositoryは作らない。
なぜ
取得と保存の単位を整合性境界と揃えると、Aggregateを部分的に更新して不変条件を壊す経路を減らせます。
判断基準
- 保存対象はAggregate Root
- ドメインで必要な取得操作だけを定義する
- テーブル単位のCRUDにしない
BAD
すべてのDBテーブルに同じCRUD Repositoryを機械的に生成する。
GOOD
OrderRepositoryがOrderを取得・保存し、OrderLineRepositoryは作らない。
図:責務と依存方向
Presentation
HTTP・画面の入出力
Application
ユースケースを進行
Domain
業務判断と不変条件
Infrastructure
DB・外部APIの実装
Application / Domainが定義したinterfaceを実装する ↑