什么是 DAO

Fanly 问答 2018-03-16 22:04:13 阅读(...)

数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。通过映射应用程序对持久层的调用,DAO提供一些特定的数据操作,而无需暴露数据库细节。

数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。通过映射应用程序对持久层的调用,DAO 提供一些特定的数据操作,而无需暴露数据库细节。这种隔离支持单一功能原则。它分离了应用程序需要访问哪些数据,就域特定对象和数据类型(DAO 的公共接口),而言,这些需求可以用数据库管理系统(DBMS)、数据库模式等满足(DAO 的实现)。

data access

尽管这种设计模式同样适用于以下内容:1、大多数编程语言;2、有持久化需求的大多数软件类型;3、大多数数据库。它在传统上与 Java EE 应用程序和关系数据库相关(通过 JDBC API 访问,因为它源于 Sun Microsystems 的最佳实践指南,该平台的“核心 J2EE 模式”)。

优点

使用数据访问对象的优点是应用程序的两个重要部分之间相对简单并严格分离,它们可以但不应该彼此了解任何东西,并且两者可预期的频繁和独立发展。改变业务逻辑可以依赖于相同的 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 来避免样板化代码。

0个人收藏 收藏

评论交流

泪雪默认头像 请「登录」后参与评论
  1. 加载中..

相关推荐

  • ranking 排名

    什么是淘宝降权

    淘宝降权是淘宝实行的一项处罚措施,被降权后,卖家的商品按关键词搜索时可以搜索到,但搜索排名靠后,也就是很难通过关键词直接搜索到宝贝。降权商品若处于上架状态,不影响正常出售。即搜索受到影响,交易不会影响,且商品不会被删除。
  • 强制关机 Forced shutdown

    什么是强制关机

    强制关机是在电脑无响应或者不能正常关机时,使用一种强制关机的方式来关闭电脑。强制关机会立即关闭电脑,不等待正在运行的程序结束,因此可能会导致文件丢失和程序损坏。
  • 二维动画 2D Animation

    什么是二维动画

    二维动画指计算机辅助动画,又称关键帧动画,其画面构图比较简单,通常由线条、矩形、圆弧及样条曲线等基本图元构成,色彩使用大面积着色,指每秒24张的动画,需要手绘一张一张的画,这种动画相当流畅,人物的动作很自然,典型的就是迪斯尼动画。
  • 丢包率 Loss Tolerance

    什么是丢包率

    丢包率是指传输中所丢失数据包数量占所发送数据包的比率,通常在吞吐量范围内测试。丢包率与数据包长度以及包发送频率相关。通常,千兆网卡在流量大于200Mbps时,丢包率小于万分之五;百兆网卡在流量大于60Mbps时,丢包率小于万分之一。
  • 多态 polymorphism

    什么是多态

    多态字面的意思就是“多种状态”,在面向对象语言中,接口的多种不同的实现方式即为多态,多态指同一个实体同时具有多种形式,它是面向对象程序设计(OOP)的一个重要特征,如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。
  • 云计算 cloud computing

    什么是东数西算

    东数西算中的“数”指的就是数据,“算”指的是算力,即对数据的处理能力,东数西算是通过构建数据中心、云计算、大数据一体化的新型算力网络体系,把东部算力需求有序引导到西部,优化数据中心建设布局,促进东西部协同联动的一项工程。