Kid*_*ond 2 entity domain-driven-design value-objects
我刚刚读到有关值对象的内容,它是不可变的,描述为:
一个简单的小对象,例如金钱或日期范围,其相等性不基于身份。
看看我当前现有的实体,我想我可以将几乎所有不是实体的东西都变成值对象。
假设我有一个实体类 User。
class User
{
public $id;
public $firstname;
public $lastname;
public $email;
}
Run Code Online (Sandbox Code Playgroud)
我可以让它由值对象Id、FirstName、LastName和组成,因为这些Email属性相等性Password都不User是基于身份的,对吧?但话又说回来,我可能会更进一步,制作更多的 VO Int、、String(由和VOName组成)等。FirstNameLastName
我应该在哪里划定界限以防止过度设计?
一个域包含这么多 VO 正常吗?
我对价值对象的理解是否正确?
是的,如果您想将类型安全性和表达性的标准设置得足够高,那么域包含大量 VO 是正常的——这通常是一件好事。
不需要重新定义Int和String,但是确定的普遍存在的语言概念肯定应该有自己的对象。
诚然,在某些语言中这样做比其他语言更自然、更轻松。这会影响你的界限。例如,在函数式语言中,将原始类型包装为type UserId = UserId of int. 我不会费心用面向对象语言来做这件事,课堂仪式就是这样。
| 归档时间: |
|
| 查看次数: |
1721 次 |
| 最近记录: |