建模两个并行聚合,实体,值对象层次结构

时间:2012-07-30 22:20:37

标签: domain-driven-design entity value-objects

我正在努力应对以下领域设计,这些设计不符合DDD的概念,因为我理解它们。

一方面,我有Device-> Sensor-> Measurement层次结构,建模为聚合,设备作为根,传感器作为实体,测量作为VO。到目前为止一切都很好。

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

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

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

这使我将每个实体(DeviceType,SensorType,Variable)作为独立实体,每个实体都有自己的(退化)。

我的具体问题是:我是否正确地解释了聚合,实体,VO的概念,或者仅仅根据反模式而拥有如此贫血的聚合?

1 个答案:

答案 0 :(得分:0)

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