每次看到“四书五经”这个词,我的脑子里总是很煞风景地冒出宝二爷那句名言:“除《四书》外,杜撰的太多,偏只我是杜撰不成?”这“杜撰”二字,当指后世理学家们阐释孔孟之道的所谓“伪经”。在这样一个标题之下,今天我要推荐的书却多是旁人对J2EE的阐释。一个道貌岸然的标题,倒让我写成一个矛盾修辞法了。不过,对于一种已经有七年历史,并且即将改朝换代(下一版本的企业Java将改名为JavaEE)的技术而言,相信读者们需要的已经不是入门教材,而是关于“如何用它来开发真实应用”的经验之谈。本文将为读者推荐数本不同角度的J2EE最佳实践集锦,希望它们能够帮助熟悉Java编程、但对J2EE缺乏了解的读者描绘一幅这个庞大世界的导游图。
《J2EE核心模式》(第二版)
《Core J2EE Patterns》 (2nd Edition),Deepak Alur等著,刘天北等译,机械工业出版社,2005年5月
译者为这本书所做的序言已足够直白:“如果说此前的各种教程都是在介绍J2EE开发中的‘内容’要素———也就是,教给我们‘做什么’———的话,本书关注的则是这里的‘形式’要素,是‘怎样做’才能开发出高效的、优雅的J2EE系统。读者从中学到的,将不仅仅是‘J2EE技术’,而是‘如何使用J2EE技术进行设计’。”不过,值得留意的是,这里所说的“J2EE技术”,应该更准确地描述为“Sun公司的J2EE技术”或者“正统J2EE技术”,即“基于EJB的J2EE技术”。由于某些原因(请容许我稍微卖个关子),这一类型的J2EE技术呈现出极大的复杂度,因此书中的解决方案(即“模式”)也往往呈现出令人敬畏的技巧。对于这本书,我的推荐意见是:读者应该牢记其中的每个解决方案以及对于这些解决方案的敬畏感——这种敬畏感将有助于你充分理解下一本书的价值所在。
《Expert One-on-One J2EE Development without EJB》
Rod Johnson等著,JavaEye译,电子工业出版社,2005年8月
揭开前面埋下的伏笔:“正统的”J2EE之所以那么复杂,很大程度上正是因为EJB的存在。而作为一个拥有十年Java经验和更长企业应用开发经验的开发者,Rod Johnson坚信这个世界上确实有很多不那么复杂的问题,而为这些问题找到同样不那么复杂的解决方案就是他(以及他的Spring框架)希望达到的目标。这本《J2EE Development without EJB》的妙处在于,它不仅指出了EJB的问题所在,更加阐述了一套完整自洽的、“Without EJB”的Java企业应用架构——全球第一大连锁超市沃尔玛的信息系统正是采用此架构搭建而成,这一事实足以证明该架构的合法性。之所以要将这本书放在《J2EE核心模式》之后推荐,是因为我担心读者在阅读《J2EE Development without EJB》之后再也没有兴趣去阅读前一本书,从而错失了充分了解EJB技术的一个机会。
更值得称道的是,Rod Johnson并不试图宣称自己的解决方案是Java企业应用的不二法门。贯穿全书,读者可以感觉到Johnson最希望传达给读者的是一种基于实践的“循证架构”方法。如果说这本书有其独到的功德,我想那不是因为它宣传了IoC或者AOP,而是因为它帮助一些读者破除了技术的门户之见,学会根据自己的需求和实践检验来选择架构。
《企业应用架构模式》
《Patterns of Enterprise Application Architecture》,Martin Fowler著,王怀民等译,机械工业出版社,2004年7月
读过前两本书之后,读者大概能够对J2EE的常见技术、问题和解决方案有所了解,随后粉墨登场的就该是Martin Fowler了。Fowler是一位善于总结他人经验的技术传教士,这本PoEAA便是他的典型作品之一:没有任何原创材料,却把很多“古而有之”的技术分析得丝丝入扣、阐述得鞭辟入里。其价值究竟有多大,只需看看诸如《J2EE核心模式》、《J2EE Development without EJB》、《.NET企业解决方案模式》一类好书有多么频繁地引用其中的内容,便可以知道大概。
这本PoEAA的缺点——和其他很多模式类书籍一样——是过于“形式化”:欠缺更具实际意义的范例,47个模式的列举与阐述多少显得有点干巴,而且对于“何时使用/不使用某个模式”这一问题的解答很难令人满意。不过,在本文涉及的几本书中,可能只有这一本是不需要额外推荐的,因为当你一次又一次地遇到别人在文章或交谈中不加解释地引用“Unit of Work”或者“Transaction Script”之类词汇之后,你很难不去读这本PoEAA。
《Enterprise Integration Patterns》
Gregor Hohpe等著,Addison-Wesley ,2003年10月(暂无中译本)
这本书中有一句话深得我心:“如果有人跟你说企业应用集成是件很轻松的事,这人要么是聪明得出奇,要么是傻得出奇,要么就是出于商业原因希望让你相信他即将兜售的某种东西。”对于习惯了面向对象的大多数Java程序员而言,充斥异步/跨进程调用的企业应用集成(EAI)不啻是一场噩梦;而在银行/保险等信息化较早的机构中,EAI的需求又偏偏如同家常便饭。两者之间的张力,使得这本书——在某些特定的时候,对于某些特定的人——有如天籁一般。在某种意义上,这本书对于破除大词迷信也有一定的帮助:它将“面向服务架构”(SOA)作为企业应用集成的六种应用类型之一加以阐述,并总结了各种类型的适用场景和优缺点。Martin Fowler为它做的序中称其为“PoEAA的姊妹书”——从填补了PoEAA所没有覆盖的一大类企业应用场景这一角度来说,这一称号是名副其实的,而作者的技术与文笔也对得起这一赞誉。
《Java Modeling in Color with UML》
Peter Coad著,Prentice Hall ,1999年6月(暂无中译本)
推荐最后这本书的目的是明确的:一位称职的J2EE开发者应该具备一定的领域建模能力。但从知名度上来说,被推荐的对象似乎应该是《分析模式》或者《Domain Driven Design》,而不是这本几乎从来没在国内引起过关注的“小书”。遗憾的是,Martin Fowler那本书缺乏对实践经验的归纳总结,而Eric Evans那本对于“怎么把业务概念变成领域模型”这件最后的、却绝非最不重要的事情语焉不详。不过好在Peter Coad是出了名的鬼才,惟其如此才能保证区区221页内容确实言之有物。
从计算机科学的角度来分析,越是形式化、可递归应用的方法就越具有可操作性。Eric Evans的DDD在“理解需求”方面的阐述很具可操作性,而Peter Coad提出的几类基本元模型对于实际进行建模工作有着非比寻常的指导价值——当大多数人在分析业务领域模型时,Peter Coad在分析业务领域的元模型,其“鬼才”由此可见一斑。至于“带颜色的UML”,无非是对元模型的一种直观描述而已。对于面向对象(而非面向用例)的企业应用业务建模,这本“小书”便是首屈一指的最佳实践指南。
* * *
读者可以看到,在我推荐的五本书中,既没有介绍时下流行的Hibernate、Spring等框架的专著,也没有讲述AOP、AJAX之类新兴技术的著作。J2EE是一个实用至上的领域,尤其是在它已经完全成熟的今天,或许更有价值的是“如何使用”的指导。在我的推荐之中不乏已问世三、五年的“旧书”,由此或许可以证明:越陈越香的大概不只是美酒,还包括技术的积淀。