假设我有一个Passenger
对象应该包含Passport
(政府ID)对象。我从Passenger
获得PassengerRepository
。 PassengerRepository
创建对服务器的请求并获取数据(json),而不是解析收到的数据并存储在存储库中。
我感到困惑,因为我想将Passport
存储为实体并将其存放到PassportRepository
,但有关密码的所有信息都包含在json中,而不是上面收到的。
我想我应该使用Passport
作为VO并将其放在Passenger
(聚合)对象中。或者我可以创建一个PassengerService
,其中包含PassengerRepository
和PassportRepository
。
有什么想法吗?
答案 0 :(得分:4)
值对象是由其属性定义的对象 - 具有相同属性值的两个实例本质上是相同的值。如果这对于您的Passport
类型是正确的,那么它应该是VO。
如果它确实是一个VO,那么你就会被排序 - 它只能通过聚合来访问。
但是,如果不是这种情况,并且在您的域中,护照的身份将保持不变,无论属性如何更改(例如某人更改其姓名),那么您需要考虑是否在您的域中Passport
实体只有在附加到Person
时才有意义。如果它们在这种情况下只有意义,那么它们也只能通过聚合来访问。
答案 1 :(得分:0)
我会说Passport是一个VO。一个人可以更换她的护照,这意味着签发了新的护照(新系列)。我认为Passport是一个仅供政府使用的实体,因为它需要跟踪每个独特的实体。对于我们其他人,我们不在乎新护照的身份是否与旧护照相同。我们关心持有效护照。