运用Ruby纤程进行异步I/O:NeverBlock和Revactor
Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。
作者 Craig Wickesser译者 郭晓刚 发布于 2007年9月16日 下午9时37分
最近有人讨论到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?
Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。
InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。
Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。
这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。
本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。
Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。
在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。
ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。
没有回复
回复