持久性无知和依赖 - 对术语感到困惑

时间:2012-10-11 18:44:43

标签: design-patterns domain-driven-design repository-pattern

可能是一个愚蠢的问题:

域实体应该完全不了解持久层,因此只能通过存储库与之通信,因此域实体应该是 Persistence Ignorant

域层持久层完全解耦的常用方法是使用存储库,其中存储库接口直播在域程序集中,资源库实现存在于持久层程序集 PLA 中。

但我对这个术语有点困惑。也就是说,我知道将 Repository interface 放在 PLA 中至少有两个原因是个坏主意,首先是因为这会强制域程序集保持对 PLA 的引用,现在 Repository接口是根据较低级别的组件定义的(即现在持久层决定了存储库接口)。但是,无论出于何种原因,我们确实将 Repository interface 放在 PLA 中,然后:

a)我们仍然认为域层(即其实体)是 Persistent Ignorant 吗?我假设是的,因为域实体仍然完全不知道持久层?!

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

谢谢

2 个答案:

答案 0 :(得分:1)

  

a)我们仍然可以争辩说Domain层(即它的实体)是Persistent Ignorant吗?我假设是的,因为域实体仍然完全不知道持久层?!

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

  

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

无关紧要。存储库接口的目的是抽象出数据层并使域模型100%持久性无知。

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

答案 1 :(得分:0)

a)域层服务(甚至实体偶尔)需要从存储库获取数据并不罕见。实际上,将存储库接口放在持久层会更频繁地破坏PI。

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