¿Cómo debemos crear nuevas raíces agregadas en la arquitectura cqrs? En este ejemplo, quiero crear una nueva raíz agregada AR2 que tenga referencia a la primera AR1.
Estoy creando AR2 usando el método AR1 como punto de partida. Hasta ahora veo pocas opciones:
- Dentro método en AR1
createAr2RootOpt1que podría llamarnew AR2()y guardar este objeto db imediatelly utilizando el servicio de dominio que tenga acceso al repositorio. Podría emitir evento en la primera raíz agregada, por ejemplo.
SholdCreateAR2Eventy luego tienen una saga sin estado que reacciona ante esto y emite un comandoCreateAR2Commandque luego se maneja y realmente crea AR2 y emiteAR2CreatedEvent. En caso de utilizar el abastecimiento de eventosSholdCreateAR2Event, no se conservaría en el almacén de eventos, ya que no afecta el estado de la primera raíz agregada. (¿O deberíamos guardar esto en la tienda de eventos?)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()); } }
¿Cuál es la forma más adecuada de hacer esto?
AR1WasCreated? Debe serAR2WasCreated? Además, si uso su lógica, ¿emito un eventoAR2WasCreatedantes de que se cree realmente? Y guardar este evento dentro del registro de eventos de AR1 parece problemático, ya que en realidad no necesito estos datos dentro de AR1 (no modifica nada dentro de AR1).