在书中,Eric Evans展示了一个例子,其中VALUE OBJECT包含ENTITIES。值对象是不可变的,实体不是。
问题是:如果一个实体从值对象引用更改其状态,是否破坏了不变性?
在我看来,它不会破坏不变性,因为对象位于 ENTITIES 数组上,而不是位于它们的状态上。
你们怎么看?
这取决于您是否可以直接通过 VO 更改实体。
想象一个可以在多个对象之间共享的 VO 实例。如果 VO 包含可变实体并将其公开为公共成员,则多个客户端可能会同时更新该实体。这会导致您希望实际不变性不会发生的问题。
另一方面,如果 VO 只保存所引用实体的 ID,则必须在更改之前从存储库中获取一个全新的实例,从而避免共享可变状态问题。