CQRS mimarisinde nasıl yeni agrega kökleri oluşturmalıyız? Bu örnekte, ilk AR1'e başvuruda bulunan yeni bir toplam kök AR2 oluşturmak istiyorum.
Başlangıç noktası olarak AR1 yöntemini kullanarak AR2 oluşturuyorum. Şimdiye kadar birkaç seçenek görüyorum:
- AR1 içinde iç yöntem
createAr2RootOpt1
çağırabilirnew AR2()
ve depoya erişim olan etki alanı hizmetini kullanarak db imediatelly için bu nesneyi kaydedebilirsiniz. Ben ilk toplama kökü örneğin olay yayabilir.
SholdCreateAR2Event
ve sonra buna tepki veren veCreateAR2Command
daha sonra işlenen ve aslında AR2 oluşturan ve yayan komut veren durumsuz destanlara sahip olunAR2CreatedEvent
. Olay kaynağının kullanılması durumundaSholdCreateAR2Event
, ilk toplama kökü durumunu etkilemediğinden olay deposunda korunmaz. (Yoksa bunu yine de etkinlik deposuna mı kaydetmeliyiz?)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()); } }
Bunu yapmanın daha uygun yolu hangisidir?
AR1WasCreated
? Olmalı mıAR2WasCreated
? Ayrıca, mantığınızı kullanırsamAR2WasCreated
, gerçekte oluşturulmadan önce olay yayarım ? Ve bu olayı AR1'in olay günlüğüne kaydetmek sorunlu görünüyor, çünkü aslında bu verilere AR1 içinde ihtiyacım yok (AR1 içindeki hiçbir şeyi değiştirmiyor).