Design patterns 持久性无知和依赖–;对术语感到困惑

Design patterns 持久性无知和依赖–;对术语感到困惑,design-patterns,domain-driven-design,repository-pattern,Design Patterns,Domain Driven Design,Repository Pattern,可能是个愚蠢的问题: 域实体应该完全不知道持久层,因此应该只通过存储库与持久层通信,因此域实体应该不知道持久层 将域层与持久层完全解耦的常用方法是使用存储库,其中存储库接口位于域程序集中,而响应实现位于持久层程序集中 但我对术语有点困惑。也就是说,我知道将存储库接口放在PLA中是个坏主意,至少有两个原因,第一个原因是这迫使域程序集持有对PLA的引用,而且现在存储库接口是根据较低级别的组件定义的(即现在的持久层规定了存储库接口的定义)。但是,如果出于任何原因,我们将存储库接口放在PLA中,那么:

可能是个愚蠢的问题:

域实体应该完全不知道持久层,因此应该只通过存储库与持久层通信,因此域实体应该不知道持久层

将域层与持久层完全解耦的常用方法是使用存储库,其中存储库接口位于域程序集中,而响应实现位于持久层程序集中

但我对术语有点困惑。也就是说,我知道将存储库接口放在PLA中是个坏主意,至少有两个原因,第一个原因是这迫使域程序集持有对PLA的引用,而且现在存储库接口是根据较低级别的组件定义的(即现在的持久层规定了存储库接口的定义)。但是,如果出于任何原因,我们将存储库接口放在PLA中,那么:

a) 我们还能说域层(即其实体)是持久的吗?我想是的,因为域实体仍然完全不知道持久层

b) 在这种情况下,正确的表达是“域组装现在依赖于PLA”还是“域层现在依赖于持久层”或者

谢谢

a)域层服务(甚至偶尔是实体)需要从存储库获取数据的情况并不少见。因此,实际上,将存储库接口放在持久性层会经常破坏PI

b) 我想你可以两者都说

a) 我们还能说域层(即其实体)是持久的吗?我想是的,因为域实体仍然完全不知道持久层

域实体仍然不知道持久层(只要它们使用接口)。然而,程序集依赖于持久层

b) 在这种情况下,正确的表达是“域组装现在依赖于PLA”还是“域层现在依赖于持久层”或者

没关系。存储库接口的目的是抽象出数据层,使域模型100%持久化

新DDD用户所犯的典型错误是在数据库之后对域模型进行建模(即首先创建数据库,然后尝试在数据库之后拟合域模型),而不是相反