如何处理删除及其相关聚合?

时间:2018-03-18 12:23:00

标签: cqrs event-sourcing

如果聚合被标记为已删除,您应该如何处理相关聚合?

例如,我们假设您有一篇文章,该文章有评论,这些评论都有评论回复,这些回复都很受欢迎。

如果文章被删除

  • 是否应为每个评论/回复/喜欢创建一个事件,以通知这些已被删除?
  • 或者文章是否应该被标记为已删除,然后在命令处理程序中如果要创建/更新这些注释,请检查该标志状态?

1 个答案:

答案 0 :(得分:4)

这取决于您的业务规则和您的聚合设计。

如果评论和喜欢是Article Aggregate的嵌套实体,那么您不应该为它们产生额外的XXXDeleted事件,因为Aggregate中不需要这些事件。如果某个命令(对于任何嵌套实体)随后出现在Aggregate中,那么它知道它(文章)已被删除并且它将拒绝它。可以设计Read模型,当ArticleDeleted事件发生时,他们也会删除所有评论和喜欢。

如果“注释”也是“聚合”,并且您有一些业务规则表明还必须删除已删除文章中的任何注释,则必须为每个链接的注释发送DeleteComment命令。您可以从Saga / Process经理执行此操作。为了追溯删除注释的原因,您应该将命令ID作为DeleteComment命令的元数据中的关联ID传递。 Read模型不需要特殊设计,因为它们将像往常一样应用CommentDeleted事件。