我作为一个团队的一员在一些 3 层应用程序上工作了相当长的时间。我喜欢这种架构,但在所有这些应用程序中,我注意到最顶层的两层对数据抽象层的严重依赖。这使得测试和模拟变得困难,因为如果没有与非常大的数据库的现有数据库连接,几乎不可能运行应用程序或执行某些方法。有没有试图解决这个问题的模式?
问问题
88 次
1 回答
1
依赖倒置原则(DIP ,SOLID 原则之一)正好解决了您描述的情况:
A. 高级模块不应该依赖于低级模块。两者都应该依赖于抽象。
B. 抽象不应该依赖于细节。细节应该取决于抽象。
对于您的情况,特别是 A 部分是相关的:而不是让 UI 和业务逻辑引用数据层,这些层应该只依赖于可以以各种方式实现的抽象(例如接口)。对于业务层,这意味着您定义了业务层所依赖的接口。数据层提供了这些接口的实现。
对于测试,您可以提供接口相关部分的另一种实现。这样,您可以准确地提供测试中使用的数据,而不是准备好完整的数据库进行测试。
这种模式也称为控制反转。您会发现很快就会有几个接口需要在运行程序时提供实现。您可以通过使用抽象工厂或更简单的方法来解决这个问题,或者更简单地使用控制反转容器来解决这个问题,该容器配置了实现接口的具体类型的注册。
您可能会发现在这方面有用的另一种模式是存储库模式。
于 2014-04-21T15:59:54.103 回答