写点什么

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

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

关注

评论

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

java集合【12】——— ArrayList,LinkedList,Vector的相同点与区别是什么?

秦怀杂货店

Java 源码 集合

微信扫码登录技术实现的简单思考

朱季谦

redis

程序员自我提升不得不知道的一些宝藏网址,收藏起来吧

北游学Java

Java 后端 资源分享

浅谈I/O多路复用

高性能架构探索

身份验证会影响用户体验吗?

龙归科技

身份认证 用户体验 安全性

区块链如何应用到食品?区块链食品安全溯源

13530558032

统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合

朱季谦

ELK

从开源的历史与今天,聊聊为什么要期待HDC.Cloud 2021

脑极体

HPE的通信技术集团将如何加速电信5G的普及和应用?

VoltDB

数据库 5G VoltDB 电信

安卓推送一体解决方案

融云 RongCloud

重磅官宣:Nacos2.0发布,性能提升10倍

阿里巴巴中间件

云计算 开源 nacos

智慧党建平台建设--开拓新时期党建系统

13530558032

区块链农产品溯源平台搭建,一物一码追溯系统

什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!

观测云

云计算 k8s 云服务 知识星球

嵌入式软件架构设计之分层设计

cdhqyj

架构 软件 嵌入式 分层

融云2021 X-Meetup启航 探索高并发下的高质量实时通信架构设计

融云 RongCloud

视频云大赛|视频目标分割,下一个视频算法技术爆发点?

阿里云CloudImagine

阿里云 算法 计算机视觉 音视频

从低代码/无代码烂大街的吃瓜群众说起

李小腾

低代码 无代码开发

量化交易系统开发;量化策略软件,马丁策略交易

深入理解Spring Security授权机制原理

朱季谦

security

区块链数字版权保护--为数字版权保护赋能

13530558032

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一

阿里巴巴中间件

阿里云 Serverless Forrester Wave

爱奇艺大数据生态的实时化建设

爱奇艺技术产品团队

大数据 实时数仓 数据流

I/O多路复用之EPOLL

高性能架构探索

新思科技解析导致汽车无钥匙进入系统易受攻击的漏洞及缺陷

InfoQ_434670063458

Instagram视频下载器: 4K Video Downloader

科技猫

软件 音视频 经验分享 资源分享 工具分享

android开发经典实战!我的移动开发春季历程,大厂直通车!

欢喜学安卓

android 程序员 面试 移动开发

阿里P7大牛整理!对Android开发的现状和未来发展的思考,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

LeetCode题解:剑指 Offer 49. 丑数,暴力法,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Kylin安装部署

五分钟学大数据

kylin 3月日更

2021最新分享Java面试全套合集!

比伯

Java 编程 架构 面试 计算机

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