写点什么

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

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

关注

评论

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

高性能API网关Kong介绍

天翼云开发者社区

ChainOfResponsibilityPattern-责任链模式

梁歪歪 ♚

设计模式

Vue框架学习笔记 每天学习----四

恒山其若陋兮

6月月更

基于 RDMA 的分布式系统研究进展

OceanBase 数据库

RDMA

当我们进行性能优化,我们在优化什么(LightHouse优化实操)

刘悦的技术博客

性能优化 前端 优化 性能优化手册

模块七作业: 王者荣耀商城异地多活架构设计

凯博无线

idea社区版和商业版有什么区别

源字节1号

软件开发

OceanBase 成为信通院首批可信开源社区、可信开源项目

OceanBase 数据库

开源 oceanbase 信通院

富滇银行完成数字化升级|OceanBase数据库助力布局分布式架构中台

OceanBase 数据库

分布式数据库 oceanbase

【愚公系列】2022年06月 二十三种设计模式(二十)-状态模式(State Pattern)

愚公搬代码

6月月更

IteratorPattern-迭代器模式

梁歪歪 ♚

设计模式

InfoQ 极客传媒 15 周年庆征文 | 轻量级状态机COLA StateMachine保姆级入门教程

Zhendong

Java 架构设计 状态机 InfoQ极客传媒15周年庆

聊聊 Sharding-Jdbc 的原理-初篇

Nick

MySQL 分库分表 中间件 ShardingJDBC 6月月更

万物并作,吾以观复|OceanBase 政企行业实践

OceanBase 数据库

数据库 oceanbase

创建一个springboot服务就是这么简单

乌龟哥哥

6月月更

【动态规划入门篇】只需三步解决它

知心宝贝

算法 前端 动态规划 Leet Code 6月月更

Oceanbase 读写分离方案探索与优化

OceanBase 数据库

分布式数据库 读写分离 oceanbase

几经波折,InfluxDB的TSDB C位还能做多久?

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

模块7作业

KennyQ

OceanBase 源码解读(十五):Location Cache 模块浅析

OceanBase 数据库

数据库 oceanbase 源码解读

如何快速上手AIRIOT?

AIRIOT

物联网 低代码平台

内存数据库和磁盘数据库哪个更强?

OceanBase 数据库

内存数据库 oceanbase 磁盘数据库

CommandPattern-命令模式

梁歪歪 ♚

设计模式

王者荣耀商城异地多活架构设计

大眼喵

「架构实战营」

程序员们,快把这款AI“魔法”做到手机相机里,求求了

最新动态

【Go实现】实践GoF的23种设计模式:原型模式

元闰子

Go 设计模式 原型模式

王者荣耀商城异地多活架构设计

dan629xy

深入浅出 ODP(一):功能模块及特性详解

OceanBase 数据库

数据库 oceanbase

通用池化框架GenericObjectPool性能测试

FunTester

[ Kitex 源码解读 ] 代码解读思路的总结

baiyutang

字节跳动 微服务 kitex 6月月更

OceanBase数据库荣获领先科技成果“新技术”奖

OceanBase 数据库

oceanbase 数博会

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