DDD中的所有值都是值对象

时间:2014-07-23 09:00:14

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

我刚读到有关值对象的信息,它是不可变的,并描述为:

  

一个小的简单对象,如金钱或日期范围,其等同性不是基于身份。

看看我现有的实体,我认为我可以做出几乎不是实体的所有事物。

假设我有一个实体类User。

class User
{
    public $id;
    public $firstname;
    public $lastname;
    public $email;
}

我可以让它由值对象IdFirstNameLastNameEmailPassword组成,因为这些{{1}都不是属性相等是基于身份的,对吧?但话又说回来,我可能会更进一步,制作更多VO UserIntString(由NameFirstName VO组成)等。

我在哪里画线以防止过度工程?

域包含那么多VO是否正常?

我对价值对象的理解是否正确?

1 个答案:

答案 0 :(得分:4)

是的,如果您想要设置类型安全和表达性足够高的栏,那么域包含大量VO是正常的 - 这通常是一件好事。

无需重新定义IntString,但确定无处不在的语言概念应该有自己的对象。

不可否认,在某些语言中,这样做比其他语言更自然,更轻松。这会影响您绘制线条的位置。在functional languages, for instance中,将type UserId = UserId of int中的基本类型包装起来并不罕见。在OO语言中我不会这么做,课堂仪式就是这样。