ページ一覧を開く

Transaction境界

Transaction境界とは

Transaction境界は、複数の変更を一つの成功または失敗として確定する範囲です。境界内の処理が失敗した場合は、変更全体を取り消します。

Transactionはどこで開始する?

推奨

原則としてApplication Serviceの1ユースケースを境界に開始し、1つのAggregateを原子的に更新する。

なぜ

ユースケースの成功・失敗とコミットを揃えつつ、ドメインをDBのTransaction APIから独立させられます。

判断基準

  • Application ServiceまたはUnit of Workが制御する
  • ドメインモデルはTransaction APIを知らない
  • 複数Aggregateの長いロックを避ける

BAD

Entityのメソッド内でDB Transactionを開始し、外部API呼び出し中もロックを保持する。

GOOD

PlaceOrderの開始時にTransactionを開き、Order保存とOutbox記録を同時にコミットする。

図:責務と依存方向

Presentation

HTTP・画面の入出力

Application

ユースケースを進行

Domain

業務判断と不変条件

Infrastructure

DB・外部APIの実装

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

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