如果聚合被标记为已删除,您应该如何处理相关聚合?
例如,我们假设您有一篇文章,该文章有评论,这些评论都有评论回复,这些回复都很受欢迎。
如果文章被删除
答案 0 :(得分:4)
这取决于您的业务规则和您的聚合设计。
如果评论和喜欢是Article Aggregate的嵌套实体,那么您不应该为它们产生额外的XXXDeleted事件,因为Aggregate中不需要这些事件。如果某个命令(对于任何嵌套实体)随后出现在Aggregate中,那么它知道它(文章)已被删除并且它将拒绝它。可以设计Read模型,当ArticleDeleted事件发生时,他们也会删除所有评论和喜欢。
如果“注释”也是“聚合”,并且您有一些业务规则表明还必须删除已删除文章中的任何注释,则必须为每个链接的注释发送DeleteComment命令。您可以从Saga / Process经理执行此操作。为了追溯删除注释的原因,您应该将命令ID作为DeleteComment命令的元数据中的关联ID传递。 Read模型不需要特殊设计,因为它们将像往常一样应用CommentDeleted事件。