在以下模型中,地址不应该是值对象吗?

use*_*278 0 entity domain-driven-design value-objects

值对象如何存储在数据库中?:

假设公司和个人都有相同的邮件地址.哪些陈述确实有效?

   1."如果我修改Company.Address,我希望Person.Address自动获取这些更改"

   2."如果我修改Company.Address,它不得影响Person.Address"

如果1为真,则Address应为实体

如果2为真,则Address应为值对象.

不应该在上面的模型中邮件Address是一个Value Object,因为即使Company并且Person有相同的邮件,这个邮件仍然没有概念身份?

换句话说,如果最初CompanyPerson分享initial.address@gmail.com,然后获得新邮件new.address@gmail.com,那么我们可以争辩说邮件地址 initial.address@gmail.com本身没有改变,而是CompanyPersonnew.address@gmail.com替换它?

因此,根据我的理解,一个Address共享的事实应该不足以赋予它个性(即身份)?!

谢谢

cas*_*nca 5

是的,你的理解是正确的.地址应该几乎总是一个值对象,因为在大多数域中,地址实际上只是一个值.

事实上,一个公司和一个有相同的地址今天不意味着,如果一个改变,其他的应该随之改变.如果存在这样的关系,则应该通过显式约束而不是通过使Address成为实体来建模.

Eric Evans在他出色的" 域驱动设计"一书中谈到了这一点,甚至还提供了一个具体的例子,其中Address可能是一个实体 - 邮政服务,其域名围绕地址,以及个别地址的身份是重要的.