数据访问对象

优点

使用数据访问对象的优点是应用程序的两个重要部分之间相对简单并严格分离，它们可以但不应该彼此了解任何东西，并且两者可预期的频繁和独立发展。改变业务逻辑可以依赖于相同的DAO接口，而对持久性逻辑的更改只要接口保持正确实现，就不会影响DAO客户端。存储的所有细节都隐藏在应用程序的其余部分中（见信息隐藏）。因此，可以修改一个DAO实现而不影响应用程序的其余部分，从而可能实现对持久性机制的更改。DAO充当了应用程序与数据库之间的中介，它们在对象与数据库记录之间来回转移数据。用测试替身取代DAO可以促进代码的单元测试，使测试不依赖于持久层。
在Java编程语言的非特定上下文中，数据访问对象作为一项设计概念可以用多种方式实现。这可以将应用程序中的数据访问部分分离为非常简单的接口，迁移到框架或商业产品。DAO编码范例可能需要一些技巧。像是Java Persistence API和Enterprise JavaBeans之类的技术已内置在应用程序服务器中，可以在JavaEE应用程序服务器的应用程序中使用。商业产品如TopLink可以在基于对象关系映射（ORM）的产品上使用。流行的开源ORM产品包括Doctrine (PHP)、Hibernate、iBATIS，以及JPA实现（例如Apache OpenJPA）。

缺点

使用DAO的潜在缺点包括抽象泄漏、代码重复和抽象反演。尤其是将DAO作为常规Java对象的抽象会隐藏每个数据库访问的高成本，并且可能强迫开发人员触发多个数据库查询来检索普通SQL查询中一次就可取回的信息。如果一个应用程序需要多个DAO，人们可能发现自己对每个DAO重复基本上相同的创建、读取、更新和删除代码。不过，也可以实现一个处理常用操作的通用DAO来避免样板化代码。