【问题标题】:Removing database dependency from 3 tier architecture从 3 层架构中移除数据库依赖
【发布时间】:2014-06-05 15:23:12
【问题描述】:

我作为一个团队的一员在一些 3 层应用程序上工作了相当长的时间。我喜欢这种架构,但在所有这些应用程序中,我注意到最顶层的两层对数据抽象层的严重依赖。这使得测试和模拟变得困难,因为如果没有与非常大的数据库的现有数据库连接,实际上不可能运行应用程序或执行某些方法。有没有试图解决这个问题的模式?

【问题讨论】:

    标签: architecture 3-tier multi-tier


    【解决方案1】:

    Dependency Inversion Principle(DIP,SOLID 原则之一)正好解决了您描述的情况:

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

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

    对于您的情况,A 部分尤其相关:这些层不应让 UI 和业务逻辑引用数据层,而应仅依赖于可以以各种方式实现的抽象(例如接口)。对于业务层,这意味着您定义了业务层所依赖的接口。数据层提供了这些接口的实现。

    对于测试,您可以提供接口相关部分的另一种实现。这样,您可以准确地提供测试中使用的数据,而不是准备好完整的数据库进行测试。

    此模式也称为Inversion of Control。您会发现很快就会有几个接口需要在运行程序时提供实现。您可以通过使用abstract factories 来解决这个问题,或者——更简单——一个控制反转容器,该容器配置了实现接口的具体类型的注册。

    在这方面您可能会发现另一个有用的模式是Repository pattern

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多