Repository interface
Repository interfaceとは
Repository interfaceは、ドメインまたはアプリケーションが必要とする取得・保存能力を表す契約です。DBやORMを使った具体的な処理から、利用側のコードを分離します。
Repository interfaceはどこに置く?
推奨
Repositoryの抽象は利用側であるドメインまたはアプリケーション側に置き、DB実装をInfrastructure側に置く。
なぜ
ドメインのユースケースがデータベースやORMへ依存せず、必要な取得能力を自分の言葉で定義できます。
判断基準
- メソッド名がドメインの語彙になっている
- ORM型を公開しない
- 実装詳細への依存が内向きに入り込まない
BAD
domainがORMのBaseRepositoryやQueryBuilderを直接importする。
GOOD
applicationのPlaceOrderが要求するOrderRepositoryをdomain側で定義し、SqlOrderRepositoryが実装する。
図:責務と依存方向
Presentation
HTTP・画面の入出力
Application
ユースケースを進行
Domain
業務判断と不変条件
Infrastructure
DB・外部APIの実装
Application / Domainが定義したinterfaceを実装する ↑