Val*_*ann 4 cqrs event-sourcing
如果某个聚合被标记为已删除,您应该如何处理相关的聚合?
例如,假设您有一篇文章,该文章有评论,而那些评论有评论回复,而那些回复已被喜欢。
如果文章被删除
这取决于您的业务规则和聚合设计。
如果“注释”和“喜欢”是“文章汇总”的嵌套实体,则不应为它们产生其他XXXDeleted事件,因为“汇总”中不需要这些事件。如果之后有任何命令(针对任何嵌套实体)出现在聚合中,则它知道该命令(该条)已被删除,它将拒绝它。读取模型的设计方式可以使当ArticleDeleted事件到来时,它们也将删除其所有注释和喜欢的对象。
如果注释也是聚合的,并且您有一些业务规则指出必须删除已删除文章中的任何注释,则必须为每个链接的注释发送DeleteComment命令。您可以从Saga /流程管理器执行此操作。为了追溯为什么删除了注释,您应该在DeleteComment命令的元数据中将命令ID作为关联ID传递。读取模型不需要特殊的设计,因为它们将像往常一样应用CommentDeleted事件。