📡
DDDアーキテクチャ・設計 2026年4月4日

ドメインイベント

📁 概念 👁 -- 閲覧

ドメインイベント

定義

ドメインイベント(Domain Event)とは、ドメイン内で起きた重要な出来事を表す不変のオブジェクト。「〜された(過去形)」で命名する:

OrderPlaced(注文が確定された)
PaymentReceived(支払いが受け付けられた)
UserRegistered(ユーザーが登録された)
ItemShipped(商品が発送された)

ドメインイベントはある時点で起きた事実を記録するため、作成後に変更してはならない。

なぜ重要か

集約が別の集約に副作用を直接呼び出すと:

  • 集約同士が結合し、変更の影響範囲が広がる
  • トランザクションが複数の集約をまたぐ(集約の設計原則違反)
  • 処理の因果関係がコードで追いにくくなる

ドメインイベントを介することで、副作用を宣言的に分離でき、集約同士は疎結合になる。

// イベントなし(密結合)
order.confirm()  // 内部でInventory.reduce()とNotifier.send()を直接呼ぶ

// イベントあり(疎結合)
order.confirm()          → OrderConfirmed イベントを発行
InventoryService が購読  → 在庫を減らす
NotificationService が購読 → メールを送る

適用場面

  • ある集約の状態変化が他の集約に影響する
  • 外部システム(メール・プッシュ通知・分析基盤)との統合
  • 操作の監査ログ・イベントログを残す
  • イベントソーシングでステートを再構築する

関連概念

出典

実践ドメイン駆動設計(Vaughn Vernon)第8章