เราควรสร้างรูทรวมใหม่ในสถาปัตยกรรม cqrs อย่างไร ในตัวอย่างนี้ฉันต้องการสร้างรากรวม AR2 ใหม่ที่เก็บการอ้างอิงถึงหนึ่ง AR1
ฉันกำลังสร้าง AR2 โดยใช้วิธี AR1 เป็นจุดเริ่มต้น จนถึงตอนนี้ฉันเห็นตัวเลือกน้อย:
- Inside method ใน 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)