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

How to handle deletes and their related aggregates?

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

例如,假设您有一篇文章,该文章有评论,这些评论有评论回复,这些回复已被点赞。

如果文章被删除

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

如果评论和点赞是文章聚合的嵌套实体,那么您不应为它们生成额外的 XXXDeleted 事件,因为聚合中不需要这些事件。如果某个命令(对于任何嵌套实体)之后出现在聚合中,那么它知道它(文章)已被删除并且它将拒绝它。 Read-models 可以这样设计,当 ArticleDeleted 事件到来时,他们也会删除所有评论和点赞。

如果评论也是聚合,并且您有一些业务规则规定必须删除已删除文章中的任何评论,那么您必须为每个链接的评论发送 DeleteComment 命令。您可以通过 Saga/Process 经理进行此操作。为了追溯删除注释的原因,您应该在 DeleteComment 命令的元数据中将命令 ID 作为关联 ID 传递。 Read-models 不需要特殊设计,因为它们将照常应用 CommentDeleted 事件。