我认为我理解价值对象(他们没有概念身份,其属性集是其定义等)以及它们与实体的区别,但我是仍然感到困惑的是,原始类型的值( int , string ...)是否也被直接分配给 Entity 的属性的 VO
例如,在以下代码中,分配给Name
的对象(类型为Person.Name
)为 VO ,但是分配给Person.FirstName
的值, Person.LastName
和Person.Age
也考虑了 VO ?
public class Person
{
public string FirstName = ...
public string LastName = ...
public int Age = ...
public Name Name = ...
...
}
public class Name
{
public string FirstName = ...
public string LastName = ...
public int Age = ...
}
谢谢
答案 0 :(得分:3)
如果值是基本类型(例如string
或int
)或由基本类型组成的复杂类型(例如Name
),则无关紧要。重要的是你认为它只是一个没有任何身份的“价值” - 那么它就是一个价值主体。
保持原语或将其包装在类中的决定是一个实现细节。特定类型在未来/添加功能中比原始类型更容易扩展。
答案 1 :(得分:1)
检查这个related question ...值对象更像是一个“概念”实现的东西...如果你考虑一下,单例和flyweight模式是关于将具有标识的对象转换为值用于优化目的的对象...它还与选择实现可变或不可变的东西有关。你总是可以说Person是不可变的,但过了一段时间,你就是一个具有不同属性的“新”人。这是一个实施决策,而不是域或概念决策。 (不可变的东西往往是值对象,以及可变的身份对象)。