DDD:实体还是VO

3
假设我有一个Passenger对象,其中应包含Passport(政府身份证)对象。我从PassengerRepository获取乘客信息。PassengerRepository向服务器发出请求并获取数据(JSON),然后解析接收到的数据并存储在存储库中,这让我感到困惑,因为我想将Passport作为实体存储并将其放入PassportRepository,但是所有有关密码的信息都包含在上面收到的JSON中。我想我应该将Passport作为VO使用,并将其放入Passenger(聚合)对象中。或者我可以创建一个PassengerService,其中将包括PassengerRepositoryPassportRepository。有什么想法吗?
2个回答

5

值对象是由其属性定义的对象-具有相同属性值的两个实例本质上是相同的值。如果这对于您的Passport类型是正确的,则应该是VO。

如果确实是VO,则可以通过聚合访问它。

然而,如果在您的领域中,护照具有恒定的身份,无论属性如何更改(例如某人更改姓名),则需要考虑在您的领域中,Passport实体仅在与Person相关联时才具有意义还是不是。如果它们仅在此上下文中具有意义,则也应仅通过聚合进行访问。


假设我有一个护照的身份证明(是的,我真的有它)。这是否是创建应该包含两个存储库PassengerRepository和PassportRepository的服务的好方法?这是领域服务还是应用程序。谢谢。 - tikhop
@tikhop - 很难说。这实际上取决于应用程序 - 它可能只是一个实体,只能由“Person”聚合访问(该聚合可以使用服务或存储库来获取“Passport”)。 - Oded

0
我认为护照是一个虚拟对象,一个人可以更换她的护照,这意味着发放一本新护照(新序列号)。我认为护照仅是政府需要跟踪每个唯一实体的实体。对于我们其他人来说,我们并不在乎新护照是否与旧护照具有相同的ID。我们在乎的是拥有有效的护照。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接