写点什么

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

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

关注

评论

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

Week5作业

王志祥

极客大学架构师训练营

rc-form源码解读

Lee Chen

大前端

环信即时通讯云荣获《2020年度云通讯产品创新奖》

DT极客

我终于弄懂了Python的装饰器(二)

BigYoung

Python 装饰器

如何优雅地运用位运算实现产品需求?

梁桂钊

Java 架构

第五周作业

好名字

Go在容器运行时要注意的细节

博文视点Broadview

容器 云原生 Go 语言

我终于弄懂了Python的装饰器(三)

BigYoung

Python 装饰器

架构师训练营第五周学习总结

R20114

架构师训练营-第5周作业

坂田吴奇隆

极客大学架构师训练营

架构师训练营-第5周总结

坂田吴奇隆

极客大学架构师训练营

官宣 | 千呼万唤,Apache Flink 1.11.0 正式发布啦!

Apache Flink

flink

你到底在忙啥呢?

池建强

创业 写作

你不知道的 Blob

阿宝哥

Java 大前端 Web Blob

计算机操作系统基础(十六)---进程同步之共享内存

书旅

php laravel 操作系统 进程 线程’

【总结】技术选型

小胖子

深入理解Java内存模型

itlemon

内存模型 Java内存模型

架构师师傅在训练营第5周感想

tuuezzy

架构师

CORS 和 CSRF 修炼宝典

Geek_z9ygea

大前端 Web CORS CSRF

Python中 *args 和 **kwargs的用法

BigYoung

Python *args **kwargs 缺省参数

区块链或将成为整治形式官僚主义的“大杀器”

CECBC

智能合约 去中心 防篡改 服务高效性

一致性hash

石刻掌纹

Python 中的元类到底是什么?这篇恐怕是最清楚的了

BigYoung

Python python元类

Week5总结

王志祥

极客大学架构师训练营

第五章作业

小胖子

Java中异常处理的9个最佳实践

码农神说

异常

Java 后端博客系统文章系统——No1

猿灯塔

人生就是体会矛盾的过程

封不羁

成长 感悟

我终于弄懂了Python的装饰器(四)

BigYoung

Python 装饰器

配置类需要标注@Configuration却不知原因?那这次就不能给你涨薪喽

YourBatman

spring Spring Boot Spring Framework @Configuration Spring配置类

出成绩了!Avaddon勒索病毒劣迹昭著,6月勒索病毒占比TOP 10榜上有名

360安全卫士

勒索病毒

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