DDD实体关系建模

DDD entity relationship modeling

我对实体关系建模有些疑惑。例如我有 User 个实体,每个用户可以拥有数量有限的 Task 个对象。任务只是一个简单的值对象。这里一切都很清楚,因为用户可以通过充当聚合根的 User 实体交互(打开、关闭、更改)任务。

现在我需要介绍另一个实体 Manager,经理应该有权访问所有任务,无论谁拥有这些任务。他还可以创建任务并将所有权传递给某个用户。我在这里有点迷路,我应该如何建模?

我是否应该将 Task 设为单独的 entity/aggregate 并保留 OwnerId 作为对 User 的引用? 我会很感激一些可以指导我正确方向的想法。

我有一个任务管理应用程序,我将任务建模为一个聚合。用户是另一个聚合。

我在任务中使用用户 ID 引用对每个关系进行建模。例如,我看到您拥有所有权和创作权。然后我应该在任务实体中:

  • CreatedBy:创建任务的用户id。
  • OwnedBy:作为任务所有者的用户的id。

我也有受让人的概念,所以我有:

  • AssignedTo: 必须执行任务的用户的id。

关于Manager,我认为它是一个角色而不是一个用户。具有管理员角色的用户可以创建任务、更改其所有者等。

这完全取决于您的业务规则,但就是这样。

你应该问的问题是

  1. 能否从创建者以外的其他人那里引用任务(现在答案似乎是肯定的)

  2. 用户或管理员可以关联一组无限的任务吗?

  3. 能否将任务重新分配给不同的用户?

如果这 3 个(或现在我手头没有的其他)问题有肯定的答案,那么你的领域概念就是一个集合

在您的情况下,您的任务概念具有作为实体处理的所有要求,以及作为聚合处理的实体。

为什么是实体?

任务毕竟有自己的id。由于打字错误,您可以将任务的描述从“Zwip under the carpet”编辑为“Swipe under the carpet”,但这不会'改变你即将要做的事情,这符合实体的定义。

为什么聚合?

那么很明显以上问题的答案是“是”,可以从用户或管理员那里管理,没有“一个用户一生大约有3个任务”这样的限制[见注释]”,这意味着您必须在单独的事务边界中更改任务状态并通过它们的 gobal id 获取它们。你不想加载属于某个用户的所有任务,我敢打赌

...但是 DDD 方法的美妙之处在于,没有人比 guy/girl 更了解构建该软件的公司的运作方式

[注意]注意这里的区分符不是用户当前正在做多少任务,而是all created与所有已创建用户关联的任务