0

可能是一个愚蠢的问题:

域实体应该完全不知道Persistence 层,因此应该只通过Repositories与其通信,因此域实体应该是Persistence Ignorant

将域层持久层完全解耦的常用方法是使用存储库,其中存储库接口位于域组件中,而存储库实现存在于持久层组件 PLA中。

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

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

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

谢谢

4

2 回答 2

1

a) 我们还能争辩说领域层(即它的实体)是持久无知的吗?我假设是的,因为域实体仍然完全不知道持久层?!

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

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

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

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

于 2012-10-16T05:57:32.523 回答
0

a) 领域层服务(有时甚至是实体)需要从存储库获取数据的情况并不少见。所以实际上,将存储库接口放在持久层中更频繁地破坏 PI。

b) 我想你可以两者都说。

于 2012-10-15T11:55:37.307 回答