为什么要在 Dao 设计模式或其他设计模式中使用界面

2022-09-01 14:07:06

请参阅以下 Dao 设计模式的组件:

数据访问对象模式或 DAO 模式用于将低级数据访问 API 或操作与高级业务服务分开。以下是数据访问对象模式的参与者。

数据访问对象接口 - 此接口定义要对模型对象执行的标准操作。

数据访问对象具体类 - 此类实现上述接口。此类负责从数据源获取数据,数据源可以是数据库/xml 或任何其他存储机制。

模型对象或值对象 - 此对象是简单的 POJO,包含用于存储使用 DAO 类检索的数据的 get/set 方法。

为什么当我们有一个具体的类时,我们需要一个接口,为什么我们不能直接使用它?这可能是一个天真的问题,但请帮我把这件事弄清楚。不仅在DAO设计模式中,而且在其他设计模式中,使用INTERFACE也有点令人困惑。我同意这与代码可重用性和减少耦合有关。但任何人都可以进一步解释一下。


答案 1

不仅在DAO设计模式中,而且在其他设计模式中,使用INTERFACE也有点令人困惑。

接口是Java中最常用的概念之一。让我用一个例子来解释这一点:假设你为汽车设计了一个GPS设备,它可以查看地图并自动将汽车转向地图中所示的方向。该GPS设备可用于许多汽车,如奔驰,菲亚特等。对于每辆车,左转或右转的机制可能因汽车系统的实施而有所不同。因此,这些函数应该由汽车制造商编写,因此这些方法被放在一个接口中,该接口由汽车制造商根据其汽车的实现实现来实现。该接口仅包含一组由汽车制造商定义的函数声明(在本例中)。明白了?

要了解有关接口及其有用性的更多信息,请阅读本文

我的问题是:当我们有一个具体的类时,为什么我们需要一个接口,为什么我们不能直接使用它。

在下面的答案中指出的许多其他好处中,您可以为不同的数据结构(derby db,大型堆栈等)创建许多DAO类,以实现DAO接口。好处是,每个类都可以存储在DAO接口变量中,这称为多态性


答案 2

实际上,当您只有一个实现时,没有必要拥有接口。但是在某些情况下,你对具体类没有贬义是非常实际的:

  • 测试调用 DAO 的服务:您可以编写一个模拟 DAO,其行为与您在测试中需要的方式相同(例如,模拟没有数据库连接,这很难自动重现)

  • 在你的DAO周围生成一些层。您可以使用 AOP 围绕 DAO 方法生成缓存或事务处理。在本例中,您有一个实现 DAOs 接口的对象,但与原始实现无关。

  • 切换数据库技术。如果您从MySQL切换到DB2,则只需要编写接口的另一个实现,然后切换MySQL DAO和DB2 DAO。

因此,为DAO和服务提供一个接口是一种很好的做法。


推荐