BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

DAO已死在JPA手上?

| 作者 Craig Wickesser 关注 0 他的粉丝 ,译者 郭晓刚 关注 0 他的粉丝 发布于 2007年9月17日. 估计阅读时间: 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?

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT