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

Val*_*ann 4 cqrs event-sourcing

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

例如,假设您有一篇文章,该文章有评论,而那些评论有评论回复,而那些回复已被喜欢。

如果文章被删除

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

Con*_*enu 5

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

如果“注释”和“喜欢”是“文章汇总”的嵌套实体,则不应为它们产生其他XXXDeleted事件,因为“汇总”中不需要这些事件。如果之后有任何命令(针对任何嵌套实体)出现在聚合中,则它知道该命令(该条)已被删除,它将拒绝它。读取模型的设计方式可以使当ArticleDeleted事件到来时,它们也将删除其所有注释和喜欢的对象。

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