ページ一覧を開く

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を実装する ↑

処理の流れは左から右へ進みます。依存は業務ルール側へ向け、DomainからフレームワークやDBを参照しません。