DDD和CQRS-为计划用例定义实体

时间:2019-07-16 05:56:00

标签: entity domain-driven-design cqrs

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

它的唯一约束是一个人不能同时做两件事。例如。如果将人员A分配到时间为2019-07-21至2010-07-25,则不能将人员A分配到该时间。例如。时间范围2019-07-23至2019-07-27的人员A应该是不可能的。

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

class Assignment {
    PersonId,
    startTime,
    endTime,
    location
}

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

因为,我将CQRS模型与DDD一起使用,所以我不想在数据库中查询该人的所有任务。由于CQRS模型的最终一致性,这可能并不总是最新数据。 我知道我的主键中有PersonId,但是我不确定如何在其中使用开始时间和结束时间。

有什么建议可以实现我的目标吗?在此执行DDD和CQRS并不是一个好主意吗?或者,有更好的方法为该实体建模,以便实现目标。

1 个答案:

答案 0 :(得分:1)

  

因为,我将CQRS模型与DDD一起使用,所以我不想在数据库中查询该人的所有任务。

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

如果您将分配作为Person聚合的值对象,则很容易同时检查是否有两个以上的分配。而且,如果作业应为单独的汇总,则人员汇总应保留作业的引用。