关于领域驱动设计:建模两个并行聚合、实体、值对象层次结构

Modeling two parallel aggregate, entity, value object hierarchies

我正在为以下域设计而苦苦挣扎,据我所知,这些域设计似乎不符合 DDD 的概念。

一方面,我有 Device->Sensor->Measurement 层次结构,建模为聚合,Device 作为根,Sensor 作为实体,Measurement 作为 VO。到目前为止一切顺利。

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

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

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

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

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


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