DDD中的所有东西都是值对象



我刚刚读到关于不可变的值对象的描述:

一个简单的小对象,如货币或日期范围,其相等性不是基于同一性。

看看我目前存在的实体,我想我可以把几乎所有不是实体的东西都变成值对象。

假设我有一个实体类User

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

我可以让它由值对象Id, FirstName, LastName, EmailPassword组成,因为这些User属性相等都不是基于恒等的,对吗?但是,我可能还可以更进一步,制作更多的VOs Int, String, Name(由FirstNameLastName VOs组成),等等。

我应该在哪里划一条线来防止过度设计?

一个域包含这么多VOs是正常的吗?

我对值对象的理解正确吗?

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

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

不可否认,在某些语言中,这样做比其他语言更自然、更轻松。这可能会影响你的界限。例如,在函数式语言中,像type UserId = UserId of int那样包装原语类型并不少见。我不会在面向对象语言中这么做,类仪式就是这样。

相关内容

  • 没有找到相关文章

最新更新