【问题标题】:Persistence Ignorance and dependencies – confused about the terminology持久性无知和依赖——对术语感到困惑
【发布时间】:2012-10-02 12:33:00
【问题描述】:

可能是个愚蠢的问题:

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

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    b) 我想你可以同时说。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多