ページ一覧を開く

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

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