DDD:关于聚合边界的问题

时间:2010-08-03 02:12:09

标签: domain-driven-design aggregateroot

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

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

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

所以我假设我们在这里有两个不同的聚合:Request Aggregate和Mission Aggregate,每个Entity都是它自己的Aggregate的根。

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

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

有什么建议吗?

MOSH

2 个答案:

答案 0 :(得分:1)

你已经走在正确的轨道上了。您遗失的内容是:聚合可以包含其他聚合。

Mission可以对其中包含的Status进行Requests次更改。

答案 1 :(得分:1)

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