这些值也是值对象吗?

时间:2012-07-11 18:08:54

标签: domain-driven-design value-objects

我认为我理解价值对象(他们没有概念身份,其属性集是其定义等)以及它们与实体的区别,但我是仍然感到困惑的是,原始类型的值( int string ...)是否也被直接分配给 Entity 的属性的 VO

例如,在以下代码中,分配给Name的对象(类型为Person.Name)为 VO ,但是分配给Person.FirstName的值, Person.LastNamePerson.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 = ...
}

谢谢

2 个答案:

答案 0 :(得分:3)

如果值是基本类型(例如stringint)或由基本类型组成的复杂类型(例如Name),则无关紧要。重要的是你认为它只是一个没有任何身份的“价值” - 那么它就是一个价值主体。

保持原语或将其包装在类中的决定是一个实现细节。特定类型在未来/添加功能中比原始类型更容易扩展。

答案 1 :(得分:1)

检查这个related question ...值对象更像是一个“概念”实现的东西...如果你考虑一下,单例和flyweight模式是关于将具有标识的对象转换为值用于优化目的的对象...它还与选择实现可变或不可变的东西有关。你总是可以说Person是不可变的,但过了一段时间,你就是一个具有不同属性的“新”人。这是一个实施决策,而不是域或概念决策。 (不可变的东西往往是值对象,以及可变的身份对象)。