7/21
複数集約にまたがる更新を処理する場合は 1. ユースケースで複数集約を更新する 2. 複数集約を更新するドメインサービスを作る(一部操作をパッケージプライベートなどの可視性で制御できるとよい) 3. ドメインイベントを使用する 主に3択です。 1,2は概ね想定されているような実装になるかと思います。 それで問題がある場合は3の方法もあります。 具体的には ・集約ルートのエンティティは親クラスとしてAggregateRootと言ったクラスを定義し、ドメインイベントを蓄積できるようにする ・売り上げエンティティのコンストラクタの中で、「売り上げ発生イベント」を生成、蓄積 ・売り上げリポジトリにinsertもしくはupdateしたタイミングで、ドメインイベントが蓄積されているかを確認 ・そのイベントをpub/subの仕組みでアプリケーションイベントとして発火(できればフレームワークのサポートがあるのが望ましい) ・ドメインイベントをサブスクライブする仕組み(私は別集約のドメインサービスを使用します)でキャッチ ・キャッチした先で別集約の処理を行う この実装は同期か非同期化は選択できます。 この仕組みで書くと売り上げ発生時には確実にサブスクライバの処理が行われるのと、ユースケースがシンプルになるという利点があります。
スポンサーリンク
スポンサーリンク
※利用規約、プライバシーポリシーに同意の上ご利用ください
スポンサーリンク