項目組內部推薦書目------一些好書

項目組內部推薦書目

 

零雨其蒙

20082

前言

本文介紹理解本項目所有架構、設計思想和具體技術、工具使用的著作,閱讀以下著作,可以更好的理解我們的項目爲何如此架構,爲什麼要使用這些工具,以及過去在項目中出現的文檔中所簡單描述的內容的背後原理是什麼。

學會使用工具是很容易的,但是知道爲何要使用這些工具以及如何進行企業信息系統的設計是非常困難的。因此,閱讀書籍首先要明確自己的學習目標,然後按照本文的分類去閱讀將比較容易而不至於被如此之多的知識淹沒。

比如你可以先學會使用EclipseSSH框架開發一個小的只包含CRUD操作的網站Demo,然後再去理解SSH是如何解決企業應用中必須要解決的問題的,閱讀Fowler的《企業應用架構模式》是最好的起點,瞭解哪些問題是企業應用必需要解決的問題,併發處理是大型企業應用必然會遇到而在開發桌面應用程序不會遇到的,而且也是在單元測試階段最不容易發現問題的。因此仔細閱讀這一部分是非常必要的,包括線程的併發訪問,數據庫併發訪問使用數據庫事務(數據庫提供了怎樣的隔離機制和鎖機制,如何設置隔離級別,以達到效率和安全的平衡)和業務事務(J2EE環境下如何使用兩階段提交來解決這一問題和對於長事務使用離線鎖模式。

同時你可以通過編寫這個Demo對於Java有個認識,並與已經學習過的語言建立聯繫。

但必須要明確學習目標,做Demo就是爲了學會使用SSHJava,而非爲了掌握設計和架構思想。

本文所推薦的書籍就是目前項目使用的架構和開發方法論的參考書籍,因此如果想要全面理解項目使用的架構、技術和開發方法論,做到知其然並知其所以然必須認真閱讀以下圖書,這是一個最簡集,當然很多思想還來自於其他書籍和實踐經驗。

PS:我花了一年時間閱讀這些書籍,某些圖書在我的Blog上有讀書筆記,大家可以參考我的讀書筆記閱讀原著,因爲畢竟我們有相似的經歷,我想我當時遇到的困惑也可能是大家會遇到的困惑。

Blogwww.blogjava.net/sslaowan

書目:

1、 架構

1)    企業架構應用模式                               Martin Fowler

2、 需求分析

2)    編寫有效用例                                      Cockburn

3)    有效用例模式                                   Steve Adolph

3、 面向對象分析

4)      分析模式:可複用的對象模型                     Martin Fowler

4、 面向對象設計

5)      UML和模式應用(原書第3版)                   Craig Larman

6)      對象設計:角色、責任和協作                       Wirfs-Brock

7)      領域驅動設計:軟件核心複雜性解決之道             Eric Evans

8)      敏捷軟件開發:原則、模式與實踐                  Robert Martin

9)      Object Primer                                   Scott W.Ambler

5、 軟件工程與敏捷開發

10)   敏捷軟件開發生態系統                            Jim Highsmith

11)   解析極限編程:擁抱變化(第2版)                   Kent Beck

12)   代碼大全                                           McConnel

13)   重構:改善既有代碼的設計                        Marin Fowler

6、 技術:JavaJ2EE

14)   Agile Java                                           Jeff Langr

15)   Contribute to Eclipse                                  Kent Beck

16)   J2EE設計開發編程指南                             Rod Johnson

17)   Expert One-on-One J2EE Development without EJB        Rod Johnson

18)   Spring框架高級編程                                Rod Johnson

19)   J2EE核心模式                                     Deepak Alur等著

20)   Struts in Action                                         Ted Husted

21)   JUnit in Action                                       Vincent Massol

22)   使用Ant進行Java開發                               Erik Hatcher

23)   POJO in Action                                        Richardson

24)   Spring從入門到精通                                   郭峯   編著

25)   敏捷AcegiCAS-構建安全的Java系統                 羅時飛 編著

本文介紹的圖書會比這個書目稍多一些。紅色標註的圖書是理解架構,進行系統分析設計的必讀讀物。

軟件開發綜述類

   建議首先閱讀本分類中的圖書,以對項目整個使用的方法的全貌有個總體瞭解。

   對於軟件開發過程的綜述,包括對於UML,模式,面向對象,迭代方法,敏捷UP的討論,Martin Fowler在多部著作中推薦了LarmanUML和模式應用(第三版)》,其中介紹了完整的從需求分析(用例,補充說明書,SSD,操作契約),領域建模,到面向對象設計(RDDGRASPGoF設計模式)的敏捷的迭代過程,其中也講解了各種實戰中的UML的畫法。另外一本AmblerObject Primer,也是講述敏捷語境下的面向對象技術,其風格更加嚴肅,不過對於業務規則,用戶界面,持久化等的討論可以作爲Larman的著作的補充。

需求分析類

     建議首先閱讀Larman的著作,以便了解需求分析並不只是依靠用例,然後編寫用例的必讀書目是Cockburn《編寫有效用例》,之後可閱讀《有效用例模式》

     還有一本講述業務規則的圖書對於理解業務流程等概念很有幫助,如果你像我一樣想明確區分業務流程,工作流,領域邏輯,業務邏輯等概念,因爲這對於如何組織系統架構的分層具有重大意義。

面向對象分析

建議閱讀Martin Fowler《分析模式:可複用對象模型》,裏面關於庫存和財務,交易,計劃,組織結構模式,測量,觀察模式的討論,對於爲我們的項目建模有一定指導作用。

另外Eric Evans《領域驅動設計:軟件核心複雜性解決之道》也是一本好書,其對於實體,值對象和服務的討論對於理解項目架構思想很有幫助。

面向對象設計

建議閱讀Robert Martin《敏捷軟件開發:原則,模式和實踐》,其Java/C++版,和C#版同樣具有幫助,其中對於OCPDIPSRPOOD原則的討論非常深入透徹,對於GOF設計模式的講解和其他相關模式的攝入都對於理解什麼是面向對象設計,以及怎樣的設計纔是正確的非常有幫助。

對於如何發現對象和爲對象分配職責這一問題,除了閱讀LarmanAmbler的書之外,Wirfs-Brock編寫的《對象設計:角色,責任和協作》是對這一問題的深入討論,其中的諸多方法如角色構造型,和對於責任,角色,協作的充分討論,對於幫助找到解決之道很有幫助。

J2EE架構

對於信息系統架構和設計的權威著作是Martin Fowler《企業應用架構模式》,它可以幫助你理解你所熟悉的和不熟悉的架構、設計決策背後隱藏的原理。其對於分層架構,領域建模,併發控制(線程和事務,鎖機制),數據持久化策略(包括數據訪問接口,實體關係映射等)等的討論都很清晰,對於理解項目中的分層結構,建立領域模型,O/R映射及其他架構模式的運用的動機有更爲深入的理解。配合POJO In Action(該書是建立在Fowler的《企業應用架構模式》,Evans的《領域驅動設計》和Johnson的《J2EE without EJB》等著作的基礎上寫的,你可以自己決定閱讀順序),有助於瞭解在敏捷J2EE架構下如何應用這些模式,其中使用了SpringHibernate框架,與我們的項目最爲接近。

     建議閱讀J2EE核心模式》,本書是Sun公司編寫的,描述了實戰中的J2EE項目使用的模式,項目中使用的很多模式來自於該書,雖然最有用的部分在Fowler的書中已經有闡述,但是直接在J2EE語境下進行討論還是有必要的,然而POJO in Action的出現,多少對此削弱了一些。

     Struts+Spring+Hibernate的入門快速上手書籍可參看郭峯的Spring從入門到精通》 主要閱讀控制反轉和依賴注入,聲明式事務處理,持久化處理(使用JdbcTemplate和整合Hibernate)。其他類似書籍所講內容大抵相同,所以建議參看其中一本快速入門,更深入的討論請閱讀JohnsonSpring高級編程指南》

     Spring方面的書籍最好按順序閱讀Rod Johnson(他是Spring之父)的三部鉅著J2EE設計開發編程指南》《J2EE without EJBSpring高級編程指南》,對於全面理解Spring的使用動機,設計原理和最佳實踐會有一個深入的理解。其中充分討論了企業應用應該注意的問題,J2EE經典架構的問題,應該如何對待EJB,以及更好的替代EJB的方案是什麼,爲什麼他們是更好的。這對於理解項目中爲什麼使用這些技術作了最爲深刻的講解。而Spring的開發手冊可作爲一個速查的手冊(主要閱讀依賴注入,聲明式事務處理,持久化,安全,遠程訪問等章節)。實踐中的Spring請參閱POJO in Action等圖書。

     Hibernate的權威之作無疑是Hibernate in Action,是Hibernate之父寫的,裏面充分的講解了持久化的最佳實踐,不過沒有中文版,其縮略版是Hibernate開發手冊,可以看這個作爲速查,關於事務,持久化,鎖等可以參閱FowlerJohnson的書,也可以參看《POJO in Action》。

     關於Struts,建議閱讀Struts in Action

     項目中用到的其他技術還包括:RCP客戶端,其中主要使用的Eclipse核心架構,在這裏推薦閱讀Kent BeckGamma寫的《Contribute to Eclipse》,GammaEclipse的首席架構師,本書詳細的講解了Eclipse架構中所用的設計模式和設計思想,對於插件架構的講解對於我們編寫RCP客戶端大有幫助。沒有任何一本Eclipse的書籍可以代替本書的價值。閱讀本書的意義在於幫助你設計客戶端程序,而關於一些基本的知識(如JFaceSWT)請參考RCP編寫的專門書籍(中國人寫的目前好像只有一本),另外也可參考《Agile Java》。

jBPM工作流引擎請參閱Spring對於jBPM的擴展項目的文檔,只有英文版。當然還要閱讀jBPM的官方文檔。一些通俗的例子請參見項目組內部文檔。另外閱讀Fowler的《企業應用架構模式》和一些工作流、業務流程管理的書籍對於理解工作流引擎大有裨益。

對於J2EE安全管理部分可閱讀JohnsonSpring高級編程指南》。手把手入門教材是羅時飛編著的《敏捷AcegiCAS-構建安全的Java系統》Acegi的官方文檔。而在實際項目中的安全管理和Acegi的使用請參考JavaEyewww.javaeye.com)的一些討論和文章。

JavaJ2EE

    推薦閱讀Agile Java,其採用測試驅動開發的方式講解Java的基礎知識,是目前我所見過的最能讀下去的Java圖書。作爲速查可以找一本計算機二級複習用書。最爲權威的著作是Core Java2,不過更象是API手冊。最爲深邃的圖書是Thinking in JavaEffective Java,對於Java有深入瞭解可以仔細看看。

     另外找一本專業的J2EE圖書,裏面會詳細講解JSPServletJNDIJDBC之類的原理和用法,建議選用和IBM WebshpereBEA Weblogic無關的J2EE圖書和有關的J2EE圖書各一本。

數據庫

建議至少閱讀《Oracle DBA入門手冊》,真正理解Oracle的優化配置,SQL語句的正確寫法,序列,索引,觸發器,函數,數據庫模式設計以及併發處理等主題。

Unix

    建議閱讀一本AIX的專著,以理解Unix操作系統的基本原理和使用方法。

敏捷開發

關於極限編程,推薦閱讀Kent Beck(他是極限編程的創始人)寫的《解析極限編程:擁抱變化(第2版)》,以幫助你理解我們項目所採用的結對編程,測試驅動開發,重構,用戶故事等實踐及其背後的原理。對於如何在敏捷環境下做計劃,本書的討論應該在加上KentFowler合著的《規劃極限編程》才更完整。制定計劃是非常重要的,同樣控制過程,檢驗計劃完成情況更加重要。

對於敏捷開發更全面的理解來自於Jim Highsmith《敏捷軟件開發生態環境》,其中討論了極限編程,ASDFDDDSDM等敏捷方法。

關於爲何不使用瀑布模型而使用迭代方法請參看Larman的《UML和模式應用》,FowlerNew MethodologyMcConnell《代碼大全》。其中LarmanMcConnell都在書中引入了大量實驗數據來說明這一問題。瀑布模型在國際上公認出自於Winston W.Royce博士於1972年發表的論文《Managing the Development of Large Software Systems》,但是該論文實際上是反對瀑布模型的。

在項目中會使用一些極限編程實踐工具,如重構,JUnitAnt等,請參考閱讀以下書籍:

關於重構的最權威的討論來自Martin Fowler《重構:改善既有代碼的設計》Eclipse中的重構功能中使用的重構名即出自此書,其對於代碼壞味道的總結對於避免團隊成員寫出糟糕的代碼有很好的指導作用;而其對於重構方法的討論非常細緻,步驟很清晰,幸運的是工具已經代替你做這些容易出錯而又細緻的步驟,你只需要理解在何種情況應該使用什麼重構法即可。

關於JUnit的最好且最簡單的著作是JUnit in Action,項目中組織測試的經驗即來自本書。由於項目採用J2EE和測試驅動開發,因此本書是必讀書籍。

關於Ant的最全面的討論是《使用Ant進行Java開發》。其中對於持續集成的討論對於實踐這一理論很有幫助,然而對於持續集成更全面的討論來自於Fowler的文章Continuous Integration

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章