Domain driven design 对两个并行聚合、实体、值对象层次结构进行建模

Domain driven design 对两个并行聚合、实体、值对象层次结构进行建模,domain-driven-design,entity,value-objects,Domain Driven Design,Entity,Value Objects,我正在努力进行以下领域设计,这些领域设计不符合我所理解的DDD概念 一方面,我将设备->传感器->测量层次结构建模为一个集合,设备作为根,传感器作为实体,测量作为VO。到目前为止还不错 现在,每个设备都有一个类型,传感器也是如此。同时,测量指已测量的变量(例如温度)。这里是事物分裂的地方 我最初将类型建模为值对象,但类型集有限,许多设备和传感器共享相同的类型 然后我决定将它们建模为一个聚合,遵循与设备聚合类似的结构:DeviceType->SensorType->Variable。但是,这不起作

我正在努力进行以下领域设计,这些领域设计不符合我所理解的DDD概念

一方面,我将设备->传感器->测量层次结构建模为一个集合,设备作为根,传感器作为实体,测量作为VO。到目前为止还不错

现在,每个设备都有一个类型,传感器也是如此。同时,测量指已测量的变量(例如温度)。这里是事物分裂的地方

我最初将类型建模为值对象,但类型集有限,许多设备和传感器共享相同的类型

然后我决定将它们建模为一个聚合,遵循与设备聚合类似的结构:DeviceType->SensorType->Variable。但是,这不起作用,因为传感器可能会引用SensorType,测量值可能会引用变量,从而打破了只允许从另一个聚合内部引用聚合根的规则。此外,可能会发生多个设备类型包括相同类型的传感器(例如,蓄电池充电传感器),并且多个传感器测量相同的变量(例如,蓄电池充电水平)

这导致我将这些实体(DeviceType、SensorType、Variable)中的每一个作为独立实体,每个实体都有自己的(退化)


我的具体问题是:我是否正确地解释了聚合、实体、VO的概念,或者说这种贫血聚合的根源是反模式

建模没有硬性规定,您应该做最适合您的用例的事情。也就是说,聚合主要用于跨一组实体维护不变量。我看不到DeviceType、SensorType和Variable之间有任何这样的约束,因此我看不出有任何理由将它们放入聚合中。将它们作为独立的实体(甚至是值对象)保存应该没问题。

我认为如果您发布了一些到目前为止的代码,这会很有帮助。到目前为止还没有代码。我还在为这个领域建模。我试图提交一张图片,但系统不允许我这样做,因为我是一个新用户。pablochacin,你有没有想出一个合适的方法来为你的领域建模?我有一个类似的情况…@oakman我最终创建了两个并行聚合层次结构,并在同一层次结构的元素之间进行了引用,这阻止了不引用而是引用聚合根的规则。然而,我认为卡萨布兰卡的答案是正确的。不建模DeviceType、SensorType和Varibale类值对象的要点是,它们不是设备传感器和测量(分别)的简单属性,就像典型的地址示例一样。它们被定义为系统配置的一部分,然后被其他实体引用。这就是让我困惑的地方。我想,正如你所指出的,也许它们应该被视为独立的实体。@pablochacin:在这种情况下,是的,你可以将它们建模为实体,但保持它们的独立性。拥有不属于集合的实体没有错。