零雨其蒙's Blog

做优秀的程序员
随笔 - 59, 文章 - 13, 评论 - 58, 引用 - 0
数据加载中……

项目组内部推荐书目

 

项目组内部推荐书目

 

零雨其蒙

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

posted on 2008-02-14 15:27 零雨其蒙 阅读(808) 评论(0)  编辑  收藏 所属分类: 学习笔记


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


网站导航: