设备和设备类型如何设计比较符合DDD思想?

设备和设备类型如何设计比较符合DDD思想?

类似的上述关系还有的XXX和XXX类型之间的关系。如何设计得符合DDD的思想呢?这是我发表本帖子的希望能够解决的问题。

就用设备和设备类型两个系统中需要考虑的“实体”(目前系统中认为两个是实体),但是个人感觉有待商榷。

设备 有:名称、机身号(若干个数字,用于唯一标识一台设备)、生产日期、规格、注册码等重要属性。
设备类型 有:类型名称、设备名称、规格等重要属性。

例如:
设备类型有一条记录是:
类型名称:RTK
设备名称:V8
规格:V8_Spec

目前系统设计的是让“设备”表Equipment拥有一个“设备类型”表的主键,EquipmentType_ID
这样一条设备实例可以如下:
名称:V8 (这里结合设备类型就可以理解为V8是我们的一种产品,可能还有V9、V100,他们都是RTK类型的产品)
机身号:10000001
生产日期:2012-9-19
规格:V8_Spec
注册码:asdfghjk(目前可以不用考虑这个属性,这个属性也是系统主要的东西)

目前系统是面向数据库思维设计实现的,因此把设备类型也设计成了一个实体,在实际系统运行过程中,一般是管理人员初始化好这张表,这样系统中就有了各种类型的产品信息,然后工厂中实际生产出某种产品就根据Equipment表中的EquipmentType_ID得到设备实体中几个设备名称、规格等属性。

本人初学DDD,来到Jdon之后看到四色原型之后想了想,感觉设备类型就是四色原型中的Description呀,怎么样都感觉吧设备类型设计为一个实体好像感觉不对劲,但是自己现在想重新设计系统又不知道应该设计才比较合理,比较符合DDD的思想。

如果把设备作为一个实体设计同时也是聚合根,设备类型是值类型,操作设备类型之前需要从聚合根开始,那么没有一个具体设备的时候如何去对这个值类型的设备类型操作呢?

本人使用.NET做开发,持久化的话,考虑用Entity Framework 4.3,我也知道DDD可以同技术架构解耦的,这里提出来是想如果有朋友也使用同样技术的话可能会方便交流。
[该贴被huting0211于2012-09-19 19:37修改过]

2012-09-19 19:35 "@huting0211"的内容
名称:V8 (这里结合设备类型就可以理解为V8是我们的一种产品,可能还有V9、V100,他们都是RTK类型的产品)
机身号:10000001
生产日期:2012-9-19
规格:V8_Spec
注册码:asdfghjk( ...

凡是包含这些标识唯一身份的都是DDD实体,设备类别可以看成是一种值对象,对于DDD实体的一种详细描述。

2012-09-19 19:35 "@huting0211"的内容
设备类型有一条记录是:
类型名称:RTK
设备名称:V8
规格:V8_Spec

目前系统设计的是让“设备”表Equipment拥有一个“设备类型”表的主键,EquipmentType_ID
这样一条设备实例可以如下:
名称: ...

这是设备与设备模板或设备家族的的关系,设备类型一般使用来进行控制的(如:使用用途,设备操作等)

class EquipmentType
{
string Code;
string Name;
}


class Equipment
{
string Name;
string Specification
string Number;
string DateManufactured
string SequenceNumber
EquipmentTemplete Template;
EquipmentType Type;
}

class EquipmentTemplete
{
string Name;
string Specification
}

类型是否实体,取决于业务,如果类型只是一个分类,能够枚举完成,
不是设备控制作业的依据,可以设计为值对象,反之,设计为实体对象.