cqrsアーキテクチャで新しい集約ルートを作成するにはどうすればよいですか?この例では、最初の1つのAR1への参照を保持する新しい集約ルートAR2を作成します。
開始点としてAR1メソッドを使用してAR2を作成しています。これまでのところ、いくつかのオプションが表示されます。
- AR1の内部メソッドでは、リポジトリにアクセスできるドメインサービスを使用して、このオブジェクトを
createAr2RootOpt1
呼び出しnew AR2()
てdb imediatellyに保存できます。 最初の集約ルートなどでイベントを発行できます。
SholdCreateAR2Event
これに反応してコマンドCreateAR2Command
を発行するステートレスサガがあり、それが処理されて実際にAR2が作成されて放出されAR2CreatedEvent
ます。イベントソースを使用する場合、SholdCreateAR2Event
最初の集約ルートの状態には影響しないため、イベントストアに保持されません。(または、これをイベントストアに保存する必要がありますか?)class AR1{ Integer id; DomainService ds; //OPTION 1 void createAr2RootOpt1(){ AR2 ar2 = new AR2(); ds.saveToRepo(ar2); } //OPTION 2 void createAr2RootOpt2(){ publishEvent(new SholdCreateAR2Event()); //we don't need this event. Shoud it still be preserved in event store? } } class AR2{ Integer id; Integer ar1Id; void handle(CreateAR2Command command){ //init this AR with values and save publishEvent(AR2CreatedEvent()); //used for projections afterwards and saved inside AR2 event store } } class Saga{ void handle(SholdCreateAR2Event ev){ emitCommand(new CreateAR2Command()); } }
これを行うためのより適切な方法はどれですか?
AR1WasCreated
ですか?それでいいのAR2WasCreated
?また、ロジックを使用する場合、AR2WasCreated
実際に作成される前にイベントを発行しますか?また、このイベントをAR1のイベントログに保存すると問題が発生します。これは、実際にはこのデータをAR1内で必要としないためです(AR1内のデータは変更されません)。