ページ一覧を開く

Application Service

Application Serviceとは

Application Serviceは、一つのユースケースを進めるために、入出力、認可、Repository、Transaction、ドメインモデルの呼び出しを調整する役割です。業務上の判断そのものは持ちません。

Application Serviceには何を書く?

推奨

ユースケースの進行、入出力、認可、Repository呼び出し、Transaction境界を調整し、業務判断はドメインモデルへ委譲する。

なぜ

アプリケーションの手順とドメインルールを分けると、同じルールを別の入口から安全に再利用できます。

判断基準

  • 処理の順序を組み立てる
  • 外部I/Oを調整する
  • ドメインオブジェクトの操作を呼び出す

BAD

Application Service内のif文だけでキャンセル期限や状態遷移を判定する。

GOOD

注文を取得し、order.cancel(reason)を呼び、保存してイベントを公開する。

図:責務と依存方向

Presentation

HTTP・画面の入出力

Application

ユースケースを進行

Domain

業務判断と不変条件

Infrastructure

DB・外部APIの実装

Application / Domainが定義したinterfaceを実装する ↑

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