DDD
ドメインイベント

【IDDD本ポイントメモ】ドメインイベント8.1~8.3あたり

More than 1 year has passed since last update.

今日都内某所でIDDD本の読書会があり、参加してきたのですが、
テーマが8章だったので8章の1節〜3節あたりでポイントになりそうな部分を自分なりの理解でまとめてみました。
今後は他の章についてもまとめてみたりしようと思います。

参考
https://codezine.jp/article/detail/10392

ドメインモデルからのイベント発行

・軽量オブザーバパターン使う
軽量オブザーバパターン.png
引用元:https://codezine.jp/article/detail/10392?p=2

アプリケーションサービス

・サブスクライバのインスタンス化
・サブスクライバをパブリッシャーに登録
・リポジトリを使って必要な集約やエンティティのインスタンスを取得?
・集約のコマンドを実行

集約

・ドメインイベントのインスタンス作成
・ドメインイベントをパブリッシュ(パブリッシャーに渡す)

ドメインイベントクラス

・イベントのプロパティ名はイベント発生元のコンテキストのユビキタス言語に従う
・イベントクラスには通知先で必要になる情報をプロパティとして設定する
・不変クラスになるため、コンストラクタでは値の設定のみ&読み取り専用
(一般的に、イベントの受信側は複数回イベントが送信されてくることを考慮し、「一意な識別子」を用いて重複排除を行う)
・ドメインイベントの名前は過去に起こったことが分かる名前にする
・ドメインイベントに持たせるプロパティ例
 →発生時刻
 →発生元の集約
 →イベント発生に必要なパラメータ

パブリッシャ

・サブスクライバ登録
・イベント種別の確認
 →サブスクライバのsubscribeToEventType()を使ってイベント種別が正しいか判別
・イベントのハンドリング
 →サブスクライバのhandleEvent()を呼び出す

サブスクライバ

・subscribeToEventType()で反応するイベントタイプを指定
・handleEvent()メール送信等イベントに関連する処理を行う

認識に誤りなどありましたらコメント頂けると嬉しいです!