写点什么

DAO 已死在 JPA 手上?

  • 2007-09-16
  • 本文字数:1009 字

    阅读完需:约 3 分钟

最近有人讨论到 Java Persistence API (JPA)是否已经杀死了 Data Access Object (DAO)。JPA 定义了将普通 Java 对象(有些人称之为 POJO)持久化到数据存储的接口。它大致上提供了与 Hibernate 之类相似的对象—关系映射。而 DAO 简单来说,可以总结为:

数据访问对象(DAO)是一种软件组件,它在应用程序与一个或多个数据存储设备(如数据库或文件)之间提供了一种通用的接口。

多数讨论的参与者都选择了各自的立场。其中一方,也是讨论的发起者 Adam Bien 认为:

……用法没法再简单了。只要把 EntityManager 注入到 bean 类……DAO 模式对于一般的数据访问不再有意义,不过某些数据访问还是需要它,比如访问存储过程、纯文件等……

几天之后, Magle 反驳说 DAO 还活得好好的,

上星期有些言论和博客文章谈论 DAO 模式的终结,特别联系到了 EJB 3 及其 EntityManager 的崛起。他们提议在你的面向业务的服务里直接使用 EntityManager,不必再把数据访问逻辑包装到 DAO 里面。我强烈反对这种意见……

Magle 接着解释了他的观点,并特别点出以下几个关键问题:

在对《 JPA/EJB3 Killed the DAO 》的补充帖子里,Adam Bien 进一步阐明了他认为 DAO 不再有必要的理由,

DAO 模式可以看成是“数据服务层”,它封装了特殊的而且常常是专用的数据访问实现。这样一层的主要目的为了让你独立于特定的数据库和 OR 映射实现。但即使是从前,我也从来没试过需要替换数据库,甚至从没试过从 SQL 换到 LDAP。
在有些情况下,例如要封装遗留系统,层次是不可改变的。照我的看法,在 Java EE 5 里面,DAO 可以被大大优化(直到消失掉:-))。DAO 接口、实现和工厂以及实际的 Session Bean 可以被压缩到一起。当然我们可以争辩依赖于 EJB 3 到底好不好,但为什么不呢?仅仅是因为 @Stateless 标注?

每个帖子都有大量的评论在添柴,比如 WarpedJavaGuy 说:

DAO 还长命着呢。持久化跟数据访问并不完全是一回事。

另一方的 Antonio Goncalves 回复说:

Java EE 的痛处是那些一遍又一遍重复的无聊代码,变成了反模式的设计模式,复杂性等等。在 EJB 里使用 EntitManager 的 CRUD 操作对我来说完全没有问题。对于简单的应用,我会跳过 DAO 模式……

总而言之,一般的公论是取决于应用和需求。 Adam 总结说

我会说:看情况。取决于你的应用到底有多复杂。

查看英文原文: Has JPA Killed the DAO?

2007-09-16 21:371668
用户头像

发布了 225 篇内容, 共 66.2 次阅读, 收获喜欢 51 次。

关注

评论

发布
暂无评论
发现更多内容

AI Agent:软件测试自动化的新纪元

测吧(北京)科技有限公司

测试

用数据说话!我国产业数字化发展现状大揭秘,如何进入未来产业发展的快车道?

博文视点Broadview

RocketMQ原理—RocketMQ整体运行原理

EquatorCoco

rocketqm

深入 JMeter 分布式加压机制:配置与性能优化技巧

测吧(北京)科技有限公司

测试

Beanshell 脚本开发实战:提升 JMeter 脚本效率与灵活性 霍格沃兹测试开发 霍格沃兹测试开发​

测吧(北京)科技有限公司

测试

EloqKV的多线程性能以及跨分片事务测试

晨章数据

数据库 nosql redis NoSQL 数据库

JMeter 分布式压测:实现大规模压力测试的最佳实践

测吧(北京)科技有限公司

测试

抖音AI分身:如何先人一步,构建AI时代商业闭环?

ToB行业头条

抖音 AI Agent

千万级的大表,如何做性能调优?

不在线第一只蜗牛

数据库 oracle

淘宝天猫API接口深度解析:商品详情与关键词搜索商品列表的使用方法及代码示例

代码忍者

淘宝API接口

KubeEdge边缘设备管理系列(三):Mapper-Framework设计与实现

华为云原生团队

云计算 容器 云原生

2024年,这些行业领军企业都选择 ONES

万事ONES

Claude 3.5:向人类般计算机操作的进步

测吧(北京)科技有限公司

测试

ONES 2024 年度回顾:向下扎根,向上生长

万事ONES

全球人形机器人行业2024年度汇总和行业前瞻报告:具身智能技术、人形机器人与商业化分析

机器人头条

科技 大模型 人形机器人 具身智能

2025年,一起与具身智能领域“大牛”聊行业现状和未来趋势

机器人头条

科技 大模型 人形机器人 具身智能

为什么软件测试开发需要智能体(AI Agent)?

测吧(北京)科技有限公司

测试

Java-Beanshell 语法与内置对象解析:如何利用 vars、ctx、prev 优化脚本

测吧(北京)科技有限公司

测试

结合LangChain实现网页数据爬取

测吧(北京)科技有限公司

测试

拍卖直播商城软件网站开发多少钱:现成源码vs定制开发

软件开发-梦幻运营部

行业热点丨低空飞行eVTOL的关键技术与发展趋势

Altair RapidMiner

AI 无人机 仿真 智能制造 航空航天

从前沿技术到行业现状,万字长文带你了解具身智能赛道!

机器人头条

科技 大模型 人形机器人 具身智能

火语言RPA--云码打码

火语言RPA

StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级

StarRocks

DeepSeek-V3模型对软件测试行业的影响

测吧(北京)科技有限公司

测试

JMeter 与持续集成:自动化测试与压测的无缝对接

测吧(北京)科技有限公司

测试

DeepSeek-V3模型:软件测试智能化的新篇章与挑战

测吧(北京)科技有限公司

测试

RUST练习生如何在生产环境构建万亿流量|得物技术

得物技术

rust 后端 可观测性

10 分钟搞定分布式选举 Bully 算法

俞凡

golang 算法 分布式系统

用Golang写了个通用路由器,除了能路由HTTP协议外,还能路由Websocket/Tcp/Udp等协议,欢迎体验

Drunk

golang router 路由 DCE 通用路由

AC+AP Networking vs. Mesh Networking

wallyslilly

DAO已死在JPA手上?_Java_Craig Wickesser_InfoQ精选文章