《J2EE核心模式》(第二版)
《Core J2EE Patterns》 (2nd Edition),Deepak Alur等著,劉天北等譯,機械工業(yè)出版社,2005年5月
譯者為這本書所做的序言已足夠直白:“如果說此前的各種教程都是在介紹J2EE開發(fā)中的‘內容’要素———也就是,教給我們‘做什么’———的話,本書關注的則是這里的‘形式’要素,是‘怎樣做’才能開發(fā)出高效的、優(yōu)雅的J2EE系統(tǒng)。讀者從中學到的,將不僅僅是‘J2EE技術’,而是‘如何使用J2EE技術進行設計’。”不過,值得留意的是,這里所說的“J2EE技術”,應該更準確地描述為“Sun公司的J2EE技術”或者“正統(tǒng)J2EE技術”,即“基于EJB的J2EE技術”。由于某些原因(請容許我稍微賣個關子),這一類型的J2EE技術呈現(xiàn)出極大的復雜度,因此書中的解決方案(即“模式”)也往往呈現(xiàn)出令人敬畏的技巧。對于這本書,我的推薦意見是:讀者應該牢記其中的每個解決方案以及對于這些解決方案的敬畏感——這種敬畏感將有助于你充分理解下一本書的價值所在。
揭開前面埋下的伏筆:“正統(tǒng)的”J2EE之所以那么復雜,很大程度上正是因為EJB的存在。而作為一個擁有十年Java經驗和更長企業(yè)應用開發(fā)經驗的開發(fā)者,Rod Johnson堅信這個世界上確實有很多不那么復雜的問題,而為這些問題找到同樣不那么復雜的解決方案就是他(以及他的Spring框架)希望達到的目標。這本《J2EE Development without EJB》的妙處在于,它不僅指出了EJB的問題所在,更加闡述了一套完整自洽的、“Without EJB”的Java企業(yè)應用架構——全球第一大連鎖超市沃爾瑪的信息系統(tǒng)正是采用此架構搭建而成,這一事實足以證明該架構的合法性。之所以要將這本書放在《J2EE核心模式》之后推薦,是因為我擔心讀者在閱讀《J2EE Development without EJB》之后再也沒有興趣去閱讀前一本書,從而錯失了充分了解EJB技術的一個機會。
更值得稱道的是,Rod Johnson并不試圖宣稱自己的解決方案是Java企業(yè)應用的不二法門。貫穿全書,讀者可以感覺到Johnson最希望傳達給讀者的是一種基于實踐的“循證架構”方法。如果說這本書有其獨到的功德,我想那不是因為它宣傳了IoC或者AOP,而是因為它幫助一些讀者破除了技術的門戶之見,學會根據自己的需求和實踐檢驗來選擇架構。
《企業(yè)應用架構模式》
《Patterns of Enterprise Application Architecture》,Martin Fowler著,王懷民等譯,機械工業(yè)出版社,2004年7月
讀過前兩本書之后,讀者大概能夠對J2EE的常見技術、問題和解決方案有所了解,隨后粉墨登場的就該是Martin Fowler了。Fowler是一位善于總結他人經驗的技術傳教士,這本PoEAA便是他的典型作品之一:沒有任何原創(chuàng)材料,卻把很多“古而有之”的技術分析得絲絲入扣、闡述得鞭辟入里。其價值究竟有多大,只需看看諸如《J2EE核心模式》、《J2EE Development without EJB》、《.NET企業(yè)解決方案模式》一類好書有多么頻繁地引用其中的內容,便可以知道大概。
這本PoEAA的缺點——和其他很多模式類書籍一樣——是過于“形式化”:欠缺更具實際意義的范例,47個模式的列舉與闡述多少顯得有點干巴,而且對于“何時使用/不使用某個模式”這一問題的解答很難令人滿意。不過,在本文涉及的幾本書中,可能只有這一本是不需要額外推薦的,因為當你一次又一次地遇到別人在文章或交談中不加解釋地引用“Unit of Work”或者“Transaction Script”之類詞匯之后,你很難不去讀這本PoEAA。
《Enterprise Integration Patterns》
Gregor Hohpe等著,Addison-Wesley ,2003年10月(暫無中譯本)
這本書中有一句話深得我心:“如果有人跟你說企業(yè)應用集成是件很輕松的事,這人要么是聰明得出奇,要么是傻得出奇,要么就是出于商業(yè)原因希望讓你相信他即將兜售的某種東西。”對于習慣了面向對象的大多數Java程序員而言,充斥異步/跨進程調用的企業(yè)應用集成(EAI)不啻是一場噩夢;而在銀行/保險等信息化較早的機構中,EAI的需求又偏偏如同家常便飯。兩者之間的張力,使得這本書——在某些特定的時候,對于某些特定的人——有如天籟一般。在某種意義上,這本書對于破除大詞迷信也有一定的幫助:它將“面向服務架構”(SOA)作為企業(yè)應用集成的六種應用類型之一加以闡述,并總結了各種類型的適用場景和優(yōu)缺點。Martin Fowler為它做的序中稱其為“PoEAA的姊妹書”——從填補了PoEAA所沒有覆蓋的一大類企業(yè)應用場景這一角度來說,這一稱號是名副其實的,而作者的技術與文筆也對得起這一贊譽。
《Java Modeling in Color with UML》
Peter Coad著,Prentice Hall ,1999年6月(暫無中譯本)
推薦最后這本書的目的是明確的:一位稱職的J2EE開發(fā)者應該具備一定的領域建模能力。但從知名度上來說,被推薦的對象似乎應該是《分析模式》或者《Domain Driven Design》,而不是這本幾乎從來沒在國內引起過關注的“小書”。遺憾的是,Martin Fowler那本書缺乏對實踐經驗的歸納總結,而Eric Evans那本對于“怎么把業(yè)務概念變成領域模型”這件最后的、卻絕非最不重要的事情語焉不詳。不過好在Peter Coad是出了名的鬼才,惟其如此才能保證區(qū)區(qū)221頁內容確實言之有物。
從計算機科學的角度來分析,越是形式化、可遞歸應用的方法就越具有可***作性。Eric Evans的DDD在“理解需求”方面的闡述很具可***作性,而Peter Coad提出的幾類基本元模型對于實際進行建模工作有著非比尋常的指導價值——當大多數人在分析業(yè)務領域模型時,Peter Coad在分析業(yè)務領域的元模型,其“鬼才”由此可見一斑。至于“帶顏色的UML”,無非是對元模型的一種直觀描述而已。對于面向對象(而非面向用例)的企業(yè)應用業(yè)務建模,這本“小書”便是首屈一指的最佳實踐指南。
讀者可以看到,在我推薦的五本書中,既沒有介紹時下流行的Hibernate、Spring等框架的專著,也沒有講述AOP、AJAX之類新興技術的著作。J2EE是一個實用至上的領域,尤其是在它已經完全成熟的今天,或許更有價值的是“如何使用”的指導。在我的推薦之中不乏已問世三、五年的“舊書”,由此或許可以證明:越陳越香的大概不只是美酒,還包括技術的積淀。