根实体可以将内部实体的临时引用传递给外部对象,但在操作完成后外部对象不保留该引用的情况下
1)
a)为什么在单个操作期间具有引用(对内部实体)的外部对象是可以接受的,但在两个操作期间保持该引用是不可接受的?我的观点是,如果在两次操作期间坚持参考是不好的,那么在一次操作期间坚持参考可能同样不好?!
b)假设SomeRootEnt
聚合根将内部实体的瞬时引用 SomeIntEnt
传递给外部对象,外部对象应该如何请求SomeIntEnt
?通过在根上调用特定方法- 例如SomeRootEnt.BorrowMeIntEnt(...)
- 或者根应该直接将内部实体公开为其属性(例如SomeRootEnt.SomeIntEnt
)?
2)
a) 假设SomeRootEnt
root将对内部实体 的引用传递SomeIntEnt
给外部对象,而后者又对 进行一些修改SomeIntEnt
,那么这是否意味着root无法对这些修改应用适当的不变逻辑(即root无法检查修改的完整性SomeIntEnt
?
b) 同样,至少在我的理解中,root也没有办法在完成单个操作后强制外部对象删除对内部实体的引用?
谢谢
更新:
2a)
这是正确的,这就是为什么最好确保传递的对象不被修改,而是以不可变的方式使用。此外,通过的实体仍然可以自行保持一定程度的完整性。
是否主要由Aggregate root(部分由传递的entity)或外部对象(接收瞬态引用)负责确保传递的实体不被修改?如果是后者,那么这个蕴的一致性真的不是由开发外在对象的人摆布吗?
2b)
正确,您有责任确保这一点。就像您必须确保给定值对象是不可变的(如果需要),您必须考虑传递引用的完整性。
我认为在大多数情况下,一旦操作完成,外部对象就有责任摆脱引用?