数据访问对象应用程序

时间:2016-03-19 06:25:53

标签: java java-ee

我是j2EE中使用DAO的新手。我对实现它有点困惑,因为我看起来已经有一个具体的类,但我们正在使用一个接口。有人会详细告诉我为什么直接使用接口而不是具体类?

1 个答案:

答案 0 :(得分:0)

数据访问对象只是模式的一部分,模式是手头数据存储之上的抽象。由于数据存储的细节可能会随时间而变化(从MsSQL更改为MySQL或Oracle或任何NoSQL存储),因此最好为数据提供API,因此在Java中使用接口。

"数据访问权限取决于数据来源。访问持久存储(例如数据库)会根据存储类型(关系数据库,面向对象的数据库,平面文件等)和供应商实现而有很大差异。"

由于客户端只能通过接口看到数据的公共API,因此可以更改后面的实现而不会产生任何后果(假设这些更改符合API建立的合同)。

"使用数据访问对象(DAO)来抽象和封装对数据源的所有访问。 DAO管理与数据源的连接以获取和存储数据。"

如果客户端使用具体的DAO类而不是DAO接口,那么每次更改和重新编译DAO类时,都应该重新编译客户端。在许多情况下,这是不可取的,因为您不想停止您的申请和/或您无法控制客户端。

另一方面,如果DAO接口保持不变,那么实现该接口的类可以更大的自由度进行更改/替换。

请注意,DAO接口只是设计模式中的一个参与者。您必须更好地了解DAO可能适合/可能不适合您的架构。您可能希望根据您的要求以不同方式组织数据访问。

一种替代方案可能是使用活动记录或数据映射器等。但实际上,有许多不同的可能性。

来源: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

来源: http://martinfowler.com/eaaCatalog/