QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

今日头条屏幕适配方案终极版正式发布!,移动应用开发平台

android 程序员 移动开发

从事这么久的Android 开发工作,知道自己处于什么段位嘛?

android 程序员 移动开发

产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践

android 程序员 移动开发

今日头条APK瘦身之路,android组件化开发框架对比

android 程序员 移动开发

从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)

android 程序员 移动开发

为什么经常看到35岁程序员,转行之后工资呈断崖式下跌?

android 程序员 移动开发

为什么不能使用 Application Context 显示 Dialog?(1)

android 程序员 移动开发

为您的应用配置 Play Feature Delivery,flutter视频教程仿京东

android 程序员 移动开发

为了这一次字节跳动Android面试机会,我准备了158天,一个疏忽让我前功尽弃

android 程序员 移动开发

携程商旅订单系统架构优化实践

GavinYe

架构 中台 后端 OTA 订单系统

为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

android 程序员 移动开发

为什么不能使用 Application Context 显示 Dialog?,安卓kotlin

android 程序员 移动开发

今年40岁了,忽然接到公司裁员通知,接下来的路我该怎么办

android 程序员 移动开发

从Android开发者的角度看一看IOS和Flutter中的列表实现

android 程序员 移动开发

中奖了!中奖了!,android组件化通信

android 程序员 移动开发

二本学历,五年抄代码经验,疫情期被裁,真牛皮

android 程序员 移动开发

【得物技术】主子订单模型

得物技术

互联网 模型 电商 订单系统 订单

毕业总结

Geek_35a345

互联网大厂“围城”,android界面开发

android 程序员 移动开发

五千字长文,深度解密:那些BAT大厂的Android面试官到底在想些什么

android 程序员 移动开发

ClickHouse用户资源隔离在 GrowingIO 的实践

GrowingIO技术专栏

Clickhouse 多租户 rbac 用户资源隔离 限流熔断

为了KPI,对APK进行极限优化!,2021年Android春招面试经历

android 程序员 移动开发

人工智能的下一站:精细化生活场景的智能时代,靠着这份900多页的PDF面试整理

android 程序员 移动开发

浮感

feitian

从0开始写一个基于Flutter的开源中国客户端(4),android应届毕业生面试题

android 程序员 移动开发

毕业设计

Geek_35a345

从 0 到 1,带你解剖 MVP 的神秘之处,并自己动手实现 MVP !

android 程序员 移动开发

从另一个角度解读handler原理,android开发书籍pdf下载

android 程序员 移动开发

从月薪8k到年薪60w,闭关3个月靠“刷题,移动端开发技术

android 程序员 移动开发

从简历被拒,到头条Android面试。二本渣渣如何在359天成功拿下offer

android 程序员 移动开发

互联网寒冬即将过去,Jetpack将是燃起来的第一把火,我先收藏为敬

android 程序员 移动开发

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