数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。通过映射应用程序对持久层的调用,DAO 提供一些特定的数据操作,而无需暴露数据库细节。这种隔离支持单一功能原则。它分离了应用程序需要访问哪些数据,就域特定对象和数据类型(DAO 的公共接口),而言,这些需求可以用数据库管理系统(DBMS)、数据库模式等满足(DAO 的实现)。
尽管这种设计模式同样适用于以下内容:1、大多数编程语言;2、有持久化需求的大多数软件类型;3、大多数数据库。它在传统上与 Java EE 应用程序和关系数据库相关(通过 JDBC API 访问,因为它源于 Sun Microsystems 的最佳实践指南,该平台的“核心 J2EE 模式”)。
使用数据访问对象的优点是应用程序的两个重要部分之间相对简单并严格分离,它们可以但不应该彼此了解任何东西,并且两者可预期的频繁和独立发展。改变业务逻辑可以依赖于相同的 DAO 接口,而对持久性逻辑的更改只要接口保持正确实现,就不会影响 DAO 客户端。存储的所有细节都隐藏在应用程序的其余部分中(见信息隐藏)。因此,可以修改一个 DAO 实现而不影响应用程序的其余部分,从而可能实现对持久性机制的更改。DAO 充当了应用程序与数据库之间的中介,它们在对象与数据库记录之间来回转移数据。用测试替身取代 DAO 可以促进代码的单元测试,使测试不依赖于持久层。
在 Java 编程语言的非特定上