我想我理解值对象(它们没有概念身份,它的属性集是它的定义等)以及它们与实体的区别,但我仍然很困惑,直接分配给实体属性的基元类型(int,string…)的值是否也被视为VO。
例如,在以下代码中,分配给Person.Name
的对象(类型为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 = ...
}
感谢
值是基元类型(如string
或int
)还是由基元类型组成的复杂类型(如Name
)都无关紧要。重要的是,你认为它只是一个没有任何身份的"价值"——那么它就是一个价值对象。
决定将其保留为基元还是将其封装在类中是一个实现细节。特定类型比基元类型更容易在将来扩展/添加功能。
检查此相关问题。。。价值对象更多的是一种实现,而不是"概念"对象。。。仔细想想,singleton和flyweight模式是为了优化目的,将具有标识的对象转换为值对象。。。它还与选择实现可变或不可变的东西有关。你总是可以说人是不可变的,但过了一段时间,你就变成了一个具有不同属性的"新"人。这是一个实施决策,而不是一个领域或概念决策。(不可变的东西往往是值对象,可变的东西是身份对象)。