DDD:关于聚合边界的问题

Posted

技术标签:

【中文标题】DDD:关于聚合边界的问题【英文标题】:DDD: Question about Aggregate boundaries 【发布时间】:2010-08-03 02:12:08 【问题描述】:

我有一个复杂的场景,其中两个聚合边界相互矛盾。

我有 2 个实体:请求和任务。用户创建请求,然后他可以创建任务并将现有请求分配给任务。

请求和任务可以独立创建。换句话说,我在创建请求时不需要任务,反之亦然。

所以我假设我们在这里有 2 个不同的聚合:请求聚合和任务聚合,每个实体都是其自己聚合的根。

但是,我们有一个不变量违反了这个假设:您可以推迟或取消任务,这会导致分配给它的所有请求的状态都会相应更新。

如果 Request 和 Mission 位于两个不同的聚合中,我该如何强制执行此约束?如果我将它们放在同一个聚合中,则无法分辨谁是聚合根,因为每个实体都可以独立创建。

有什么建议吗?

莫什

【问题讨论】:

【参考方案1】:

您已经走在正确的轨道上。您缺少的部分是:聚合可以包含其他聚合。

您的Mission 可以触发其包含的任何Requests 上的Status 更改。

【讨论】:

【参考方案2】:

我的建议是使用事件模式。当一个 Agreegate 的状态是更改发布事件时。这可以在处理程序中使用,该处理程序将能够更改其他聚合状态。希望有道理。

【讨论】:

以上是关于DDD:关于聚合边界的问题的主要内容,如果未能解决你的问题,请参考以下文章

DDD之2领域概念

DDD之2领域概念

可落地的DDD-战术设计上的一些误区

可落地的DDD-战术设计上的一些误区

DDD之2领域概念

DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)