DDD中的值对象

时间:2014-04-19 05:42:58

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

我的销售模块中有OrderOrderType个类,OrderType类用于某些分类目标,并在Order上应用了一些业务规则。每个班级都有自己的表格。

我想在我的项目中应用DDD技术。 所以,我认为Order是一个聚合根,但OrderType呢? 它是否也包含在Order聚合中,还是值对象? 我认为这将是一个有价值的对象。 我是对的吗?

enter image description here

3 个答案:

答案 0 :(得分:1)

有一个常见问题“Entity vs Value Object”。

  

OrderType怎么样?它是否也包含在订单汇总中或是   它是 Value object ?我认为这将是一个有价值的对象。我是对的吗?

我会说OrderType是一个实体,但它取决于您的域名。

Value ObjectEntity之间的区别很简单:

  1. 值对象在所有属性相同时被视为相同。

      

    当你只关心元素的属性和逻辑时   模型,将其分类为值对象。让它表达的意思   它传达的属性并赋予它相关的功能。对待   值对象为不可变的。

  2. 实体在具有相同身份时被视为相同。

      

    当一个对象通过其身份而不是它的身份来区分时   属性,使其主要在模型中定义。保持   类定义简单,注重生命周期的连续性和   身份。

  3. a simple “litmus test” for Entities

      

    如果同一对象的两个实例具有不同的属性值,   但是相同的身份价值,它们是同一个实体吗?

答案 1 :(得分:0)

一如既往“这取决于......”

根据您的描述,它似乎应该是一个Value对象,或者正如Eric Evans所说的那样,只有没有身份的Readonly实体

  1. OrderType应该是一个单独的实体(可以发送到其他对象)还是Order个对象的一小部分?

  2. 即使相同的字段OrderTypeCodeTitle是否具有身份并且是唯一对象?

    是 - >有身份证的实体;不 - >价值对象

答案 2 :(得分:0)

你可能甚至不需要一个类来建模OrderType。如果您的编程语言支持,则具有属性的枚举可能就足够了,例如

public enum OrderType {
  [Code("ABC123")]
  OneTime = 0,
  [Code("XYZ456")]
  Repeating = 1
}