如何在DDD中处理删除聚合根?

JD.*_*JD. 6 domain-driven-design

我有两个聚合根引用另一个聚合根(首先通过第二个聚合根的标识引用第二个).

来自我的应用程序层的命令(通过MVC asp.net)现在删除我的第二个聚合根.

在删除根目录时,是否发送一个域事件,告诉第一个聚合根目录"NULL"对第二个聚合的引用现在不存在?

JD

Yve*_*out 7

你是以错误的方式去做的.退出您面临的技术问题.首先,我怀疑在你无处不在的语言中存在"删除"这样的事情.很可能人们会将其称为"存档","无序","删除","缺货",......某些术语表示特定聚合处于其生命周期的末尾.当域名专家谈到这些事情时,这应该是你向他们提出一个问题的触发器:"如果你停止使用产品,那将如何影响该特定产品的促销?".要与问题相关联:促销是包含对产品聚合的引用的聚合.所以它非常成为一个商业问题而不是技术问题.大多数情况下,商业人士已经制定了一个流程来防止此技术问题的发生(例如,您无法停止在促销中使用的产品).我希望现在很清楚,给你一个通用答案不是一个选择.

  • 我会+1这个答案,以鼓励OP使用普遍存在的语言重新表述问题,但事实是,你实际上还没有回答这个问题。如果您将 AR 从当前状态中删除称为“删除”、“取消发布”、“存档”等,这并不重要。问题是,在从一种状态(其中 AR 存在并被引用)转换时其他实体 - 到下一个状态 - AR 不再存在 - 引用原始 AR 的实体如何更新?术语“引用完整性”不仅仅局限于 DBA 对外键的使用。 (4认同)