依赖其他聚合的聚合的EventSourcing

时间:2018-12-22 17:02:02

标签: domain-driven-design event-sourcing aggregateroot

我目前正在使用以EventSource样式编写的日历系统。 我目前正在苦苦挣扎的是如何创建一个可以创建许多较小事件的事件,以及如何以一种可以重播它们的方式存储其他事件。

例如,我可能会触发一个CreateReminderSchedule,然后它会触发许多较小事件的构造,例如CreateReminder。

{
  id:1
  description: "Clean room",
  weekdays:[5]
  start: 01.12.2018,
  end: 01.12.2018
  type: CREATEREMINDERSCHEDULE
}

然后这将创建具有不同ID的CreateReminder聚合负载,以便您可以编辑较小的ID,即

{
  id:2
  description: "Clean room"
  date: 07.12.2018
  type: CREATEREMINDER
  scheduleId: 1
}

对我来说,一个问题是,当我重播所有事件时,createReminderSchedule随后将重新触发createReminderEvents,这意味着我将在重播期间收到比所需更多的提醒。

是删除较小事件的答案,而只有一个大型create事件列出了事件中所有提醒的ID,例如:

{
  id:1
  description: "Clean room",
  weekdays:[5]
  start: 01.12.2018,
  end: 01.12.2018
  type: CREATEREMINDERSCHEDULE
  reminderIds:[2,3,4,5,...]
}

但是,如果我这样做,那么我将没有所有提醒汇总的基础事件。

请注意,提醒者必须了解hinterSchedule,以便我稍后可以更改hinterSchedule以更新与该提醒计划有关的所有提醒

1 个答案:

答案 0 :(得分:0)

也许您将事件与命令混淆了。您可能具有处理后的命令以创建提醒(以事件的形式,即ReminderCreated),然后将其应用于您的集合以创建提醒对象。每次您从事件源重播事件时,都会以相同的方式重新创建此状态。