ddd:实体或VO

时间:2012-11-07 13:02:39

标签: oop design-patterns domain-driven-design

假设我有一个Passenger对象应该包含Passport(政府ID)对象。我从Passenger获得PassengerRepositoryPassengerRepository创建对服务器的请求并获取数据(json),而不是解析收到的数据并存储在存储库中。

我感到困惑,因为我想将Passport存储为实体并将其存放到PassportRepository,但有关密码的所有信息都包含在json中,而不是上面收到的。

我想我应该使用Passport作为VO并将其放在Passenger(聚合)对象中。或者我可以创建一个PassengerService,其中包含PassengerRepositoryPassportRepository

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

如果它确实是一个VO,那么你就会被排序 - 它只能通过聚合来访问。

但是,如果不是这种情况,并且在您的域中,护照的身份将保持不变,无论属性如何更改(例如某人更改其姓名),那么您需要考虑是否在您的域中Passport实体只有在附加到Person时才有意义。如果它们在这种情况下只有意义,那么它们也只能通过聚合来访问。

答案 1 :(得分:0)

我会说Passport是一个VO。一个人可以更换她的护照,这意味着签发了新的护照(新系列)。我认为Passport是一个仅供政府使用的实体,因为它需要跟踪每个独特的实体。对于我们其他人,我们不在乎新护照的身份是否与旧护照相同。我们关心持有效护照。