写点什么

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

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

关注

评论

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

AI-Compass(AI百科全书开源):构建最全面的AI学习与实践生态,服务AI全群体

汀丶人工智能

人工智能 大模型

AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐

汀丶人工智能

开启你的专属智能时代:枫清科技个人智能体限时体验计划上线!

Fabarta

人工智能 智能体 agent

高性能数据模型设计

俞凡

大数据

终结数据孤岛!百度智能云亮相TDBC大会:重塑数据与AI的连接方式

科技热闻

MCP协议中的不安全凭证存储漏洞分析与安全实践

qife122

MCP 凭证安全

Recompress for Mac PDF文件压缩软件

晨光熹微

AI虫子种类识别数据集(近3000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】

申公豹

数据集 yolo

使用AWS KMS和ML-DSA创建后量子签名指南

qife122

AWS KMS ML-DSA

AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架

汀丶人工智能

淘宝商品评论API接口详解

tbapi

淘宝商品评论接口 天猫商品评论接口 淘宝评论API 天猫评论API 淘宝评论采集

完美黑客配置的秘诀?Docker化渗透测试工具集ReconBox详解

qife122

网络安全 渗透测试

MKVToolNix for Mac mkv视频编辑工具

晨光熹微

淘宝商品详情API响应数据解析(一)

tbapi

淘宝商品详情接口 淘宝API 天猫商品详情接口 天猫API

n8n教程分享,从Github读取.md文档内容

溪抱鱼

人工智能 n8n

摆脱偏见,Mac也要逆袭“游戏圈”

阿拉灯神丁

crossover MacBook M1 如何在Mac上运行win游戏 Mac游戏推荐 游戏本

基于YOLOv8的AI虫子种类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

javax.security.auth.login.LoginException: null (68)

刘大猫

人工智能 数据挖掘 算法 数据分析 LoginException

以故事+动画方式,让PID知识通俗易懂部分一

芯动大师

低代码可视化工作流的系统设计与实现路径研究

JeeLowCode低代码平台

工作流 低代码 可视化 工作流编排 低代码选择

使用Svelte和D3实现交互式数据可视化

qife122

数据可视化 Svelte

一篇说人话的文章,告诉你 Django、Flask、FastAPI 到底怎么选

程序员晚枫

django flask FastApi

AI招聘机器人公司Paradox.ai因弱密码泄露数百万求职者数据

qife122

网络安全 密码安全

从 Berlinterop 看三大确定性趋势:以太坊升级与 Layer 2 生态新篇章

NFT Research

Ethereum blockchain web3、

从Web 2.0到Agentic Web:MCP对智能代理生态构建的推动作用

申公豹

Web

AI-Compass前沿速览:ChatGPT Agent、Kimi2、Mistral语音模型、Grok AI情感陪伴、百度Tizzy、有言数字人

汀丶人工智能

人工智能 大模型

领先OpenAI三个月,百度文库GenFlow领跑通用Agent领域,2.0版本8月上线

科技热闻

Flink exactly once sink 实现

Joseph295

大数据-46 Redis RDB 持久化机制详解:原理、配置与优缺点解析

武子康

Java redis 大数据 缓存 分布式

Netflix 数据网关实践

俞凡

架构 大厂实践

AI-Compass Embedding模型模块:15+主流向量化技术的多模态语义表示生态

汀丶人工智能

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