写点什么

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:371634
用户头像

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

关注

评论

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

为什么选择 NineData 作为 MongoDB 的最佳拍档?

NineData

mongodb NineData MongoDB 数据库管理工具 MongoDB数据库

「我在淘天做技术」智能对话新纪元:百万日活对话机器人的LLM落地实践

阿里技术

招聘 对话机器人 LLM 我在淘天做技术 落地实践

【年后跳槽必看篇-非广告】Kafka核心知识点-第二章

派大星

Java 面试

融云全球通信网的「最后一公里体验」之战

融云 RongCloud

Linux 中常用的基础命令

emanjusaka

bash Linux command

解析Java Chassis 3中应用视角的配置管理

华为云开发者联盟

Java 微服务 开发 华为云 华为云开发者联盟

火山引擎ByteHouse:“专用向量数据库”与“数据库+向量扩展”,怎么选?

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 企业号 1 月 PK 榜

别再因为React、Vue吵了,真的毫无新意!

伤感汤姆布利柏

全国独家线下面授 | 上海 · 大规模敏捷认证LeSS实践者课程3月14-16日火热报名

ShineScrum

大规模敏捷 LeSS认证 CLP认证 LeSS认证实践者

玩转数据处理利器:学会使用 YAML 文件轻松处理数据

霍格沃兹测试开发学社

鸿蒙5.0发布时间已定!鸿蒙系统上的App开发新思路

FinFish

鸿蒙 小程序生态 小程序容器 鸿蒙Next 鸿蒙5.0

基于PAI-EAS一键部署Stable Diffusion AIGC绘画

阿里云大数据AI技术

深入探析MySQL数据库:优势、版本与发展全面解读

小魏写代码

第37期 | GPTSecurity周报

云起无垠

谷歌 2024 新年目标曝光:一边做地表最强 AI,一边裁更多员工丨 RTE 开发者日报 Vol.132

声网

【教程】混淆Dart 代码

COB封装LED显示屏vs. SMD封装LED屏

Dylan

技术 封装 LED LED display LED显示屏

【第七在线】智能商品计划:让供应链管理更加智能、高效

第七在线

文心一言 VS 讯飞星火 VS chatgpt (185)-- 算法导论14.1 2题

福大大架构师每日一题

福大大架构师每日一题

Java开发中不要使用受检异常

码语者

Java 异常

传统企业和数字化企业的关系及优劣势

天津汇柏科技有限公司

数字化转型 企业数字化

华为云低代码问答——低代码为什么这么“香”

华为云PaaS服务小智

低代码 华为云

Prometheus最佳实践 Summary和Histogram

华为云开发者联盟

开发 华为云 华为云开发者联盟

轻松上手:通过阿里云PAI QuickStart微调部署Qwen-72B-Chat模型

阿里云大数据AI技术

大数据平台红蓝对抗 - 磨利刃,淬精兵!

京东科技开发者

Dart代码混淆

雪奈椰子

请谨慎选择工作offer

老张

面试 求职面试 offer大厂

每日一题:LeetCode-138. 随机链表的复制

Geek_4z9ami

算法 链表 LeetCode Go 语言 回溯

软件测试/测试管理|如何打造一份出彩的工作汇报!

霍格沃兹测试开发学社

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