【问题标题】:Correct Implementation Domain Driven Design正确实现领域驱动设计
【发布时间】:2015-05-01 16:11:00
【问题描述】:

我有一个关于领域驱动设计的重要实施问题。 在埃文斯的书中层架构的表示上,域引用层基础设施这是最低层,但是我在互联网上的所有实现中看到相反,基础设施层引用域层,可能是因为使用 ORM 的存储库模式。大家对此怎么看?有人会举出一个与埃文斯的书完全一样的例子。

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    您看到的接口位于域中的示例(例如UserRepository)以及它们的实现位于基础架构中的示例(例如HibernateUserRepository)正在将依赖倒置原则 (DIP) 应用于传统的分层架构。

    在传统的分层架构中,高层模块应该依赖于低层模块。如果我们查看标准层顺序,我们会得到Domain -> Infrastructure

    我们真的希望我们的域依赖于基础架构细节吗?通过应用 DIP 原则,我们反转了依赖关系,使 Infrastructure 依赖于 Domain 层,但它不依赖于具体化,而是依赖于抽象。

    DIP 原则是这样规定的:

    A.高级模块不应该依赖于低级模块。两者都应该依赖于抽象。

    B.抽象不应该依赖于细节。细节应该取决于抽象。

    来源:http://en.wikipedia.org/wiki/Dependency_inversion_principle

    【讨论】:

      【解决方案2】:

      您确定您正在正确查看依赖项吗?存储库并不完全是基础设施,它们位于您的域和数据访问层之间。

      如 Fowler 的书中所述,存储库

      使用类集合接口访问域对象,在域和数据映射层之间进行调解。

      如果您使用的是数据库,或者如您所说的 ORM,您的存储库实现将引用 ORM。很多时候,存储库被实现为一个泛型类,它“引用”域的唯一方法是它使用基“实体”类作为泛型约束。

      “by this”和“by that”的数据检索查询通常在存储库类中实现,但这不是一个很好的做法。这项工作是针对查询或规范,存储库应该能够在不了解它们的很多细节的情况下执行。

      【讨论】:

        猜你喜欢
        • 2019-06-27
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 2011-10-06
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        相关资源
        最近更新 更多