Allan

I choose, I like!
posts - 5, comments - 1, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Expert One-on-One J2EE Development without EJB 看后感

Posted on 2005-12-06 19:26 Allon 阅读(383) 评论(0)  编辑  收藏 所属分类: Book Study

      在网上看到这本<<Expert One-on-One J2EE Development without EJB>>书已好长时间了,评价不错,随即买之,用了两个周的时间总算看完了(硬着头皮看完的),感觉就象经受洗礼了一番,好痛苦啊!(看的不太懂,还需修炼一两年),不过收获还是有的,以前只是用一种局部的、狭隘的眼光去看待整个软件产业的发展趋势,而现在懂得了怎样从宏观的角度去看待技术和软件产业的发展!这本书大部分讲的都是一些理论,实例很少,所以看起来很痛苦,但不乏其中也有一些经验性的思想,摘录一段:“优秀的开发者当然都对智力上的事情具有好奇心,而且也都会为自己使用的技术感到兴致勃勃,但是,只有最出众的开发者,才懂得克制上面这些冲动,服从于实际项目的需要。”

      书中着力介绍了Sping、Hibernate、WebWork等都是时下流行的开源框架,Ioc、AOP之类都是时下流行的概念名词。而最大的看点则是“without EJB”,我们曾经在无数的书籍和文章中看到,EJB是J2EE的核心技术之一;而Rod Johnson的这本书竟然宣传,绝大多数的J2EE应用根本不需要EJB。这无疑是向J2EE的架构师们摆起了挑衅的姿态。但所有这些尽皆不是本书的最大的价值所在,选择一种架构、一种技术的依据是什么?Rod Johnson认为,应该是基于实践的证据、来自历史项目或亲自试验的经验,而不是任何形式的偶像崇拜或者门户之见。

     “帕累托法则”,这个法则也常常被称为“80/20(或者90/10)法则”,也就是说:花比较少(10%-20%)的力气就可以解决大部分的问题,而要解决剩下的少部分问题则需要多得多的努力。在软件架构这里,这个法则告诉我们:架构的价值在于为常见的问题找到好的解决方案,而不是一心想要解决更复杂也更罕见的问题。

      这几年来,在J2EE社群里,WEB层结构出现了两种趋势:以Jakarta的Struts、OpenSymphony的WebWork2和Sping的web MVC框架为代表的请求驱动类型以及Tapestry和JSF是以事件为驱动MVC的类型。Struts的核心概念是:action必须继承org.apache.struts.actionl.Action基类,action是控制器组件,它类似于servlet:可以重用,并且是线程安全的对象。但Struts1.1的标准框架中不提供任何形式的拦截器,虽一个名为SAIF的附加项目则实现了这样的功能,但它的适用的范围还很有限。WebWork2是WebWork全新的改版,它是一个流行的web MVC开源框架,WebWork2最终版在2004年2月发布。它与Struts的不同在于它一直致力于减少应用代码对servlet API的依赖,提升可重用性。Spring提供了一个Web框架,它是建立在Spring的核心概念-IoC的应用上下文之上,并将其扩展到Web环境,与中间层应用上下文之间无缝结合。由于Spring的分层架构,Spring中间层上下文也能容易地集成到不同的Web框架中,在Spring和专用Web框架之间最根本的区别是:Spring将它的Web MVC框架作为总体方案的一部分,因此它被设计为松散耦合,并且无缝的和Spring中间层丰富的IoC和AOP管理功能融为一体。Tapstry是Howard Lewis Ship开发的开源Web MVC框架,它致力于彻底分离java代码和HTML模板的分离。而在2001年的JavaOne大会上,Sun宣布了一个新的JSR:JSF,它的目标是创建一个很适合GUI开发工具的、基于JSP的web MVC框架。JSF最终在2004年3月被发布。JSF采用了基于事件的风格,但它提供了与Tapstry完全不同的编程模型。它的焦点是大量使用JSP标签库来构建表单,并在JSP代码中嵌入验证器和导航规则的引用。Tapstry和JSF都分享了ASP.NET的某些概念:Tapstry偏重于“页面类”,JSF则偏重于动态Web页和工具支持。

      EJB的强大在于是把组件模型和企业级服务合二为一,使得EJB组件可以通过声明性或者编程性的方式使用企业级服务,但EJB最大的问题不是对于远程调用或是session bean的技术解决方案,关键在于EJB的侵入性太强,用起来又那么复杂。而这正是轻量级容器最重要的优势之一,它是借助控制反转的配置来达成无侵入性的目标的。     

      就目前软件行业的发展来看:Spring提供了目前最强大的轻量级IoC容器。另外也有其他的开源框架:WebWork、PicoContainer、HiveMind、Nanning Aspects、AspectWerkz、JBoss4、AspectJ。比entity bean优秀的持久化框架包括:JDO、Hibernate、TopLink,对于大多数项目,推荐使用Hibernate或者JDO。在不适合使用O/R映射的时候,还可以通过iBatis数据库层或者Spring提供的JDBC包高效地访问数据。轻量级的IoC容器在实现J2EE应用方面有着巨大的优势,相信IoC将与AOP一道成为下一代J2EE构架的基础。

      从以前的Sun Java PetStroe和最近的Oracle Virtual J2EE Shopping Mall 等示例应用中可以看出“经典”J2EE架构的特征是将业务对象建模为带远程接口的EJB,并用entity bean来处理持久化,而EJB3.0的出现,不管是“后EJB架构”时代的信徒还是轻量级框架开源项目的崇拜者,我们有理由相信Spring提供的价值是独一无二的,而控制反转(IoC)和AOP是任何“EJB接班人”所必备的。

 


只有注册用户登录后才能发表评论。


网站导航: