赞
踩
项目组内部推荐书目
零雨其蒙
2008 年 2 月
本文介绍理解本项目所有架构、设计思想和具体技术、工具使用的著作,阅读以下著作,可以更好的理解我们的项目为何如此架构,为什么要使用这些工具,以及过去在项目中出现的文档中所简单描述的内容的背后原理是什么。
学会使用工具是很容易的,但是知道为何要使用这些工具以及如何进行企业信息系统的设计是非常困难的。因此,阅读书籍首先要明确自己的学习目标,然后按照本文的分类去阅读将比较容易而不至于被如此之多的知识淹没。
比如你可以先学会使用 Eclipse, SSH框架开发一个小的只包含 CRUD操作的网站 Demo,然后再去理解 SSH是如何解决企业应用中必须要解决的问题的,阅读 Fowler的《企业应用架构模式》是最好的起点,了解哪些问题是企业应用必需要解决的问题,并发处理是大型企业应用必然会遇到而在开发桌面应用程序不会遇到的,而且也是在单元测试阶段最不容易发现问题的。因此仔细阅读这一部分是非常必要的,包括线程的并发访问,数据库并发访问使用数据库事务(数据库提供了怎样的隔离机制和锁机制,如何设置隔离级别,以达到效率和安全的平衡)和业务事务( J2EE环境下如何使用两阶段提交来解决这一问题和对于长事务使用离线锁模式。
同时你可以通过编写这个 Demo对于 Java有个认识,并与已经学习过的语言建立联系。
但必须要明确学习目标,做 Demo就是为了学会使用 SSH和 Java,而非为了掌握设计和架构思想。
本文所推荐的书籍就是目前项目使用的架构和开发方法论的参考书籍,因此如果想要全面理解项目使用的架构、技术和开发方法论,做到知其然并知其所以然必须认真阅读以下图书,这是一个最简集,当然很多思想还来自于其他书籍和实践经验。
PS:我花了一年时间阅读这些书籍,某些图书在我的 Blog上有读书笔记,大家可以参考我的读书笔记阅读原著,因为毕竟我们有相似的经历,我想我当时遇到的困惑也可能是大家会遇到的困惑。
Blog: www.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、 技术: Java和 J2EE
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) 敏捷 Acegi、 CAS-构建安全的 Java系统 罗时飞 编著
本文介绍的图书会比这个书目稍多一些。红色标注的图书是理解架构,进行系统分析设计的必读读物。
建议首先阅读本分类中的图书,以对项目整个使用的方法的全貌有个总体了解。
对于软件开发过程的综述,包括对于 UML,模式,面向对象,迭代方法,敏捷 UP的讨论, Martin Fowler在多部著作中推荐了 Larman的《 UML 和模式应用(第三版)》 ,其中介绍了完整的从需求分析(用例,补充说明书, SSD,操作契约),领域建模,到面向对象设计( RDD, GRASP, GoF设计模式)的敏捷的迭代过程,其中也讲解了各种实战中的 UML的画法。另外一本 Ambler的《 Object Primer 》 ,也是讲述敏捷语境下的面向对象技术,其风格更加严肃,不过对于业务规则,用户界面,持久化等的讨论可以作为 Larman的著作的补充。
建议首先阅读 Larman的著作,以便了解需求分析并不只是依靠用例,然后编写用例的必读书目是 Cockburn的《编写有效用例》 ,之后可阅读《有效用例模式》 。
还有一本讲述业务规则 的图书对于理解业务流程等概念很有帮助,如果你像我一样想明确区分业务流程,工作流,领域逻辑,业务逻辑等概念,因为这对于如何组织系统架构的分层具有重大意义。
建议阅读 Martin Fowler的《分析模式:可复用对象模型》 ,里面关于库存和财务,交易,计划,组织结构模式,测量,观察模式的讨论,对于为我们的项目建模有一定指导作用。
另外 Eric Evans的《领域驱动设计:软件核心复杂性解决之道》 也是一本好书,其对于实体,值对象和服务的讨论对于理解项目架构思想很有帮助。
建议阅读 Robert Martin的《敏捷软件开发:原则,模式和实践》 ,其 Java/C++版,和 C#版同样具有帮助,其中对于 OCP, DIP, SRP等 OOD原则的讨论非常深入透彻,对于 GOF设计模式的讲解和其他相关模式的摄入都对于理解什么是面向对象设计,以及怎样的设计才是正确的非常有帮助。
对于如何发现对象和为对象分配职责这一问题,除了阅读 Larman和 Ambler的书之外, Wirfs-Brock编写的《对象设计:角色,责任和协作》 是对这一问题的深入讨论,其中的诸多方法如角色构造型,和对于责任,角色,协作的充分讨论,对于帮助找到解决之道很有帮助。
对于信息系统架构和设计的权威著作是 Martin Fowler的《企业应用架构模式》 ,它可以帮助你理解你所熟悉的和不熟悉的架构、设计决策背后隐藏的原理。其对于分层架构,领域建模,并发控制(线程和事务,锁机制),数据持久化策略(包括数据访问接口,实体关系映射等)等的讨论都很清晰,对于理解项目中的分层结构,建立领域模型, O/R映射及其他架构模式的运用的动机有更为深入的理解。配合《 POJO In Action 》 (该书是建立在 Fowler的《企业应用架构模式》, Evans的《领域驱动设计》和 Johnson的《 J2EE without EJB》等著作的基础上写的,你可以自己决定阅读顺序),有助于了解在敏捷 J2EE架构下如何应用这些模式,其中使用了 Spring, Hibernate框架,与我们的项目最为接近。
建议阅读《 J2EE 核心模式》 ,本书是 Sun公司编写的,描述了实战中的 J2EE项目使用的模式,项目中使用的很多模式来自于该书,虽然最有用的部分在 Fowler的书中已经有阐述,但是直接在 J2EE语境下进行讨论还是有必要的,然而《 POJO in Action 》 的出现,多少对此削弱了一些。
Struts+Spring+Hibernate的入门快速上手书籍可参看郭峰的《 Spring 从入门到精通》 。 主要阅读控制反转和依赖注入,声明式事务处理,持久化处理(使用 JdbcTemplate和整合 Hibernate)。其他类似书籍所讲内容大抵相同,所以建议参看其中一本快速入门,更深入的讨论请阅读 Johnson的《 Spring 高级编程指南》 。
Spring方面的书籍最好按顺序阅读 Rod Johnson(他是 Spring之父)的三部巨著《 J2EE 设计开发编程指南》《 J2EE without EJB 》 和《 Spring 高级编程指南》 ,对于全面理解 Spring的使用动机,设计原理和最佳实践会有一个深入的理解。其中充分讨论了企业应用应该注意的问题, J2EE经典架构的问题,应该如何对待 EJB,以及更好的替代 EJB的方案是什么,为什么他们是更好的。这对于理解项目中为什么使用这些技术作了最为深刻的讲解。而 Spring的开发手册可作为一个速查的手册(主要阅读依赖注入,声明式事务处理,持久化,安全,远程访问等章节)。实践中的 Spring请参阅《 POJO in Action 》 等图书。
Hibernate的权威之作无疑是《 Hibernate in Action 》 ,是 Hibernate之父写的,里面充分的讲解了持久化的最佳实践,不过没有中文版,其缩略版是 Hibernate开发手册,可以看这个作为速查,关于事务,持久化,锁等可以参阅 Fowler和 Johnson的书,也可以参看《 POJO in Action》。
关于 Struts,建议阅读《 Struts in Action 》 。
项目中用到的其他技术还包括: RCP客户端,其中主要使用的 Eclipse核心架构,在这里推荐阅读 Kent Beck和 Gamma写的《 Contribute to Eclipse》, Gamma是 Eclipse的首席架构师,本书详细的讲解了 Eclipse架构中所用的设计模式和设计思想,对于插件架构的讲解对于我们编写 RCP客户端大有帮助。没有任何一本 Eclipse的书籍可以代替本书的价值。阅读本书的意义在于帮助你设计客户端程序,而关于一些基本的知识(如 JFace, SWT)请参考 RCP编写的专门书籍(中国人写的目前好像只有一本),另外也可参考《 Agile Java》。
jBPM工作流引擎请参阅 Spring对于 jBPM的扩展项目的文档,只有英文版。当然还要阅读 jBPM的官方文档。一些通俗的例子请参见项目组内部文档。另外阅读 Fowler的《企业应用架构模式》和一些工作流、业务流程管理的书籍对于理解工作流引擎大有裨益。
对于 J2EE安全管理部分可阅读 Johnson的《 Spring 高级编程指南》 。手把手入门教材是罗时飞编著的《敏捷 Acegi 、 CAS -构建安全的 Java 系统》 和 Acegi的官方文档。而在实际项目中的安全管理和 Acegi的使用请参考 JavaEye( www.iteye.com)的一些讨论和文章。
推荐阅读《 Agile Java 》 ,其采用测试驱动开发的方式讲解 Java的基础知识,是目前我所见过的最能读下去的 Java图书。作为速查可以找一本计算机二级复习用书。最为权威的著作是《 Core Java2 》 ,不过更象是 API手册。最为深邃的图书是《 Thinking in Java 》 和《 Effective Java 》 ,对于 Java有深入了解可以仔细看看。
另外找一本专业的 J2EE图书,里面会详细讲解 JSP, Servlet, JNDI, JDBC之类的原理和用法,建议选用和 IBM Webshpere或 BEA Weblogic无关的 J2EE图书和有关的 J2EE图书各一本。
建议至少阅读《 Oracle DBA入门手册》,真正理解 Oracle的优化配置, SQL语句的正确写法,序列,索引,触发器,函数,数据库模式设计以及并发处理等主题。
建议阅读一本 AIX的专著,以理解 Unix操作系统的基本原理和使用方法。
关于极限编程,推荐阅读 Kent Beck(他是极限编程的创始人)写的《解析极限编程:拥抱变化(第 2 版)》 ,以帮助你理解我们项目所采用的结对编程,测试驱动开发,重构,用户故事等实践及其背后的原理。对于如何在敏捷环境下做计划,本书的讨论应该在加上 Kent和 Fowler合著的《规划极限编程》 才更完整。制定计划是非常重要的,同样控制过程,检验计划完成情况更加重要。
对于敏捷开发更全面的理解来自于 Jim Highsmith的《敏捷软件开发生态环境》 ,其中讨论了极限编程, ASD, FDD, DSDM等敏捷方法。
关于为何不使用瀑布模型而使用迭代方法请参看 Larman的《 UML和模式应用》, Fowler的 New Methodology , McConnell的《代码大全》 。其中 Larman和 McConnell都在书中引入了大量实验数据来说明这一问题。瀑布模型在国际上公认出自于 Winston W.Royce博士于 1972年发表的论文《 Managing the Development of Large Software Systems》,但是该论文实际上是反对瀑布模型的。
在项目中会使用一些极限编程实践工具,如重构, JUnit, Ant等,请参考阅读以下书籍:
关于重构的最权威的讨论来自 Martin Fowler的《重构:改善既有代码的设计》 , Eclipse中的重构功能中使用的重构名即出自此书,其对于代码坏味道的总结对于避免团队成员写出糟糕的代码有很好的指导作用;而其对于重构方法的讨论非常细致,步骤很清晰,幸运的是工具已经代替你做这些容易出错而又细致的步骤,你只需要理解在何种情况应该使用什么重构法即可。
关于 JUnit的最好且最简单的著作是《 JUnit in Action 》 ,项目中组织测试的经验即来自本书。由于项目采用 J2EE和测试驱动开发,因此本书是必读书籍。
关于 Ant的最全面的讨论是《使用 Ant 进行 Java 开发 》。其中对于持续集成的讨论对于实践这一理论很有帮助,然而对于持续集成更全面的讨论来自于 Fowler的文章 Continuous Integration 。
转自:http://sslaowan.iteye.com/blog/162239
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。