2011-12-20 55 views
5

我有两个引用另一个聚合根的聚合根(首先通过第二个聚合根的身份引用第二个聚合根)。如何删除在DDD中处理的聚合根?

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

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

JD

回答

5

你正在以错误的方式前进。从您面临的技术问题退后一步。首先我怀疑你的无处不在的语言中有“删除”这样的东西。最有可能的人会称之为“档案”,“无序”,“删除”,“缺货”......一些术语表示特定的聚合物处于其生命周期的末尾。当领域专家谈论这样的事情时,这应该成为一个触发器,让你按照以下的方式向他们提出一个问题:“如果你停止了某个产品,那么这对那个特定产品的促销活动有什么影响?”。关联到您的问题:促销是对产品聚合进行引用的聚合。所以它非常成为一个商业问题而不是技术问题。大多数情况下,商务人士已经有了一个可以防止此技术问题首先发生的流程(例如,您不能停止在促销中使用的产品)。我希望现在清楚,给你一个通用答案不是一种选择。

+0

谢谢你的回复。是的,从技术角度来看,我一直在看太多。好的,在这种情况下,我们有一个视频文件存储和一个文件可以删除。用户实际上删除了现在由我的第二个聚合引用的视频文件。在与业务分析师交谈时,他的回答是,我应该将其记录在事件文件中,并将其从记录器服务中删除。当记录器服务运行时,它不会失败,并在那个时候处理。所以在我的情况下,我必须在第二个聚合中“空”它。什么是正确的方法来做到这一点? – 2011-12-22 16:30:33

+0

关心分享更多细节? – 2011-12-25 19:55:01

+0

因此,基本上用户可以删除视频,这意味着他们被从我们的应用程序中删除。我没有其他方法可以把它定义为“生命周期的终结”。我曾问过,如果我们能够阻止视频在其他地方使用(在另一个聚合中),但答复是不重要的,我们应该允许删除(即我们有1000个视频,并试图找出谁正在使用它们(即聚合)工作太多,对用户而言并不重要)。 – 2011-12-30 19:21:48