2012-07-30 31 views
0

我正在努力处理下面的域设计,因为我理解它们不符合DDD的概念。一方面,我有设备 - >传感器 - >测量层次结构,建模为带有设备的聚合,作为根,传感器作为实体,测量为VO。到现在为止还挺好。建模两个并行的聚合,实体和值对象层次结构

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

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

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

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

我的具体问题是:我是否正确地解释了Aggregate,Entity,VO的概念,还是将这种贫血的聚集体完全根植于反模式?

+0

我认为这会有帮助,如果你发布了一些你到目前为止的代码。 – eulerfx 2012-07-31 00:09:29

+0

到目前为止还没有代码。我仍然在对域进行建模。我试图提交一个图像,但系统不允许我这样做,因为我是一个新用户。 – pablochacin 2012-07-31 04:47:16

+0

pablochacin,你有没有想出一个适合你的域名建模的方法?我也有类似的情况...... – oakman 2015-01-05 11:24:28

回答

0

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

+0

不像Device Objects和Varibale那样对值对象进行建模的一点是,它们不是像典型地址示例那样简单属性的Device Sensor和Measurement(分别)。它们被定义为系统配置的一部分,然后由其他实体引用。这让我感到困惑。 我想,正如你所指出的,也许他们应该被视为独立的实体。 – pablochacin 2012-08-01 06:40:15

+0

@pablochacin:在这种情况下,是的,你可以将它们建模为实体,但保持独立。拥有不属于聚合的实体没有任何错误。 – casablanca 2012-08-02 01:46:58