DDD 和 CQRS - 为调度用例定义一个实体

DDD and CQRS - Define an entity for Scheduling use case

我有一个用例,可以安排一个人在某个时间范围内完成某些工作。例如。分配人员 A 在时间范围 X 到 Z 的位置 C 工作的服务。

它唯一的限制是一个人不能同时处理两件事。例如。如果 A 被分配到 2019-07-21 到 2010-07-25 的时间工作,那么 A 不能在这段时间被分配到任何其他工作。例如。时间范围为 2019-07-23 到 2019-07-27 的人 A 应该是不可能的。

我正在尝试使用域驱动设计为它提供服务,该设计会将一个人分配给某些工作。我认为的实体类似于:

class Assignment {
    PersonId,
    startTime,
    endTime,
    location
}

现在,我想确保如果我在某个时间范围内在我的数据库中找到了 A 人的条目,那么在与现有条目重叠的时间范围内为 A 人创建条目的调用应该失败。

因为我正在使用 DDD 的 CQRS 模型,所以我不想查询我的数据库来询问那个人的所有分配。由于 CQRS 模型的最终一致性,这可能并不总是最近的数据。 我知道在我的主键中,PersonId 会在那里,但我不确定如何在其中使用开始和结束时间。

有什么建议可以实现我的目标吗?在这方面做 DDD 和 CQRS 不是一个好主意吗?或者有更好的方法来建模这个实体,这样我就可以实现我的目标。

Since, I am using CQRS model with DDD, so I don't want to make a query to my database asking for all the assignments for that person.

CQRS 只是读写(命令和查询)之间的分离。执行命令时,可以查询写入模型

如果您将赋值作为 Person 聚合的值对象,则检查是否同时有超过 2 个赋值很容易。如果分配应该是一个单独的聚合,那么 Person 聚合应该保留对分配的引用。