![]() |
1
6
聚合不应以允许从外部更改聚合的内部状态的方式公开数据。 这意味着聚合根对象不应该分发对内部实体的引用。如果要更改聚合的状态,则向根实体发送一条消息,该逻辑决定是自己执行工作还是将其委派给其他实体。 根对象的查询应返回值。
简而言之:你根本不应该把“实体”暴露在聚合之外。 实体的动机是它们改变状态。聚合的动机是它们协调实体间的状态变化。如果从聚合中泄漏实体,则聚合不再具有协调所有更改的能力。
如果不想更改聚合,请使用返回查询答案的不可变表示形式的查询。这种不可变表示的精确性质可能因语言而异;在最初的领域驱动设计文本中,示例取自Java,在Java中,不可变表示是使用“值对象”实现的。见第五章 blue book . |
![]() |
2
1
这是一个可视范围的问题。这取决于您使用的编程语言。例如,在java中,我将一个聚合放在一个包中。聚合根实体将是公共的。其他的将有包范围,即,没有关键字的可见性。 |
![]() |
Tony Raimo · 域实体是否应该调用存储库? 7 年前 |
![]() |
Seb · DDD只读存储库返回“值对象” 7 年前 |
![]() |
tlt · 使用嵌套对象和大集合进行聚合根优化 7 年前 |
![]() |
PatrickSJ · DDD,状态对象/值对象 7 年前 |
![]() |
msmani · DDD更改聚合根id 7 年前 |
![]() |
DuskMcDusk · 逻辑和性能中的聚合根冲突 7 年前 |