【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

web前端培训如何在 H5 网页中实现扫码功能

@零度

前端开发

聚焦Arbitrum开发热点技术,一探以太坊的L2未来

TinTinLand

DFINITY 明星项目盘点,区块链热门赛道一览

TinTinLand

区块链

【直播回顾】Hello HarmonyOS进阶课程第五课——原子化服务

HarmonyOS开发者

HarmonyOS

Java中的阻塞队列

急需上岸的小谢

6月月更

阿里云架构师梁旭:MES on 云盒,助力客户快速构建数字工厂

阿里云弹性计算

最佳实践 数字化转型 制造业 mes 云盒

IC 首届全球黑客松奖金高达600 万美元,助力开发者勇闯 Web 3!

TinTinLand

区块链

Electron框架XSS TO RCE简析

美创科技

漏洞

PHP 对接微信公众号订阅消息详细教程

CRMEB

实时特征计算平台架构方法论和基于 OpenMLDB 的实践

第四范式开发者社区

机器学习 数据库 AI 特征平台 特征工程

场景驱动的特征计算方式OpenMLDB,高效实现“现算先用”

第四范式开发者社区

人工智能 机器学习 数据库 开源 实时计算

技术分享| 如何部署安装分布式序列号生成器系统

anyRTC开发者

分布式 后端 音视频 服务器 Tinyid

融云一图看懂:社死的“谭某某”,霸屏的信息安全

融云 RongCloud

服务器运维环境安全体系(上篇)

融云 RongCloud

网络安全

Python的教程

智趣匠

Python编程 6月月更

私有化IM即时通讯怎样在保障企业安全下提高效率?

WorkPlus

发布一个轻量级的 Elasticsearch 压测工具 - Loadgen

极限实验室

elasticsearch 极限实验室 loadgen 压测工具 esrally

博睿数据荣获优炫软件产品兼容互认证书和海量数据兼容互认证书

博睿数据

智能运维 博睿数据 产品兼容 数据兼容

Kubernetes容器网络及Flannel插件详解

巨子嘉

云原生

专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】

掂掂三生有幸

云原生 Skywalking ,docker 微服务框架 6月月更

互联网拓扑是怎样构成的?又代表了什么?

郑州埃文科技

互联网拓扑 网络空间地图

虚拟主机、WordPress 主机和云主机之间的区别

海拥(haiyong.site)

6月月更

CC2530 GPIO口输出配置说明​

DS小龙哥

6月月更

火遍全网的AI给老照片上色,这里有一份详细教程!

博文视点Broadview

Microsoft  Office  MSDT 代码执行漏洞

郑州埃文科技

网络安全 漏洞分析 漏洞缓解

变量 var const let 的区别

大熊G

JavaScript 前端 前端教程 6月月更

2022年SaaS的10个有趣趋势

小炮

Django基础-1

zyf

django 6月月更

大数据培训Hive到Spark离线计算实践

@零度

spark hive 大数据开发

架构实战营模块 7 作业

热猫

好声音不同凡响,泥炭耳机618重磅新品来袭

江湖老铁

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