【发布时间】:2022-01-15 16:58:15
【问题描述】:
有一个概念是关于将persistent layer 与domain layer 分开以使domain layer 更加健壮-它不依赖于persistence layer 中存储库的实际实现,但仅在存储库界面上。
这意味着我们有:
IPersonRepository {...} // in domain layer
PersonCassandraRepository implements IPersonRepository {...} // in persistence layer
Person (Aggregate Root) {...}
现在,Person 呢?
在anemic-domain-model 我们可以有:
IPerson {...} // in domain layer
Person implements IPerson {...} // in persistence layer
为什么要将 Person 放在 持久层?
因为它包含特定于实现的代码。
例如,它可能包含与 JPA 相关的注释,并且与存储库相同,我们不希望在我们的 域层中实现数据存储特定的实现。
我们可以使用 anemic-domain-model 来完成上述操作,因为 Person 不包含任何域逻辑,这意味着我们可以将 Person 放在 persistene 层。
在 anemic-domain-model 中,数据与行为是分离的,因此 Person 的行为是由分离的服务完成的,而不是写在 Person 本身中。
我们无法使用 rich-domain-model 进行这种层分离,因为在这种情况下,Person 确实包含特定于域的逻辑。
您将如何在 富域模型 应用程序中进行这种层分离?
或者您可能认为不需要它。
【问题讨论】:
标签: domain-driven-design ddd-repositories anemic-domain-model rich-domain-model