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