Domain driven design 依赖其他聚合的聚合的EventSourcing

Domain driven design 依赖其他聚合的聚合的EventSourcing,domain-driven-design,event-sourcing,aggregateroot,Domain Driven Design,Event Sourcing,Aggregateroot,我目前正在使用EventSource样式编写的日历系统。 我目前正在努力解决的是如何创建一个能够创建许多较小事件的事件,以及如何以允许重播的方式存储其他事件 例如,我可以触发一个CreateMemendersSchedule,然后触发许多较小事件的构造,例如CreateMenderschedule { id:1 description: "Clean room", weekdays:[5] start: 01.12.2018, end: 01.12.2018 type:

我目前正在使用EventSource样式编写的日历系统。 我目前正在努力解决的是如何创建一个能够创建许多较小事件的事件,以及如何以允许重播的方式存储其他事件

例如,我可以触发一个CreateMemendersSchedule,然后触发许多较小事件的构造,例如CreateMenderschedule

{
  id:1
  description: "Clean room",
  weekdays:[5]
  start: 01.12.2018,
  end: 01.12.2018
  type: CREATEREMINDERSCHEDULE
}
然后,这将创建具有不同ID的CreateReminder聚合负载,以便您可以编辑较小的聚合,即

{
  id:2
  description: "Clean room"
  date: 07.12.2018
  type: CREATEREMINDER
  scheduleId: 1
}
因此,对我来说,一个问题是,当我重播所有事件时,CreateMemendorSchedule将重新触发CreateMendorEvents,这意味着在重播过程中,我将拥有比需要的更多的提醒

是删除较小事件的答案,只需创建一个大事件,列出事件中提醒的所有ID,如:

{
  id:1
  description: "Clean room",
  weekdays:[5]
  start: 01.12.2018,
  end: 01.12.2018
  type: CREATEREMINDERSCHEDULE
  reminderIds:[2,3,4,5,...]
}
但是如果我这样做,那么我就不会有所有提醒聚合的基本事件


注意:提醒必须知道提醒计划,以便我以后可以更改提醒计划,以更新与该提醒计划相关的所有提醒。可能您将事件与命令混淆了。您可以处理一个命令来创建提醒(以事件的形式,即ReminderCreated),然后将其应用于聚合以创建提醒对象。每次从事件源重播事件时,都会以相同的方式重新创建此状态。

消费者是否应该对此负责?您在这里所做的只是发布
事件
事件。然后,您的
侦听器应尽其所能删除重复事件。@AnkitVijay这就是问题所在。当在创建这些事件时生成新的较小事件(CreateMememenders)的id时,此侦听器如何知道是否存在重复事件。我认为有一个建议是CreateScheduleMememployer存储即将生成的ID。但这感觉有点像黑客。不管您在发布端做什么,我认为您的侦听器无论如何都应该处理重复的事件(例如:如果用户发送了两次相同的请求,并且
creatememberschedule
被多次触发怎么办?),如果这意味着您需要存储生成的ID,就这样吧。