项目组内部推荐书目
零雨其蒙
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编写的《对象设计:角色,责任和协作》是对这一问题的深入讨论,其中的诸多方法如角色构造型,和对于责任,角色,协作的充分讨论,对于帮助找到解决之道很有帮助。
J2EE架构
对于信息系统架构和设计的权威著作是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)的一些讨论和文章。
Java与J2EE
推荐阅读《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语句的正确写法,序列,索引,触发器,函数,数据库模式设计以及并发处理等主题。
Unix
建议阅读一本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。
分享到:
相关推荐
2. **坐标(Coordinates)**: Maven使用一组唯一标识符来定位项目,包括groupId、artifactId和version,类似于软件开发中的命名空间、类名和版本号。 3. **依赖管理(Dependency Management)**: Maven通过POM自动...
4. 《3C框架——片面危险治理规范》和《片面危险治理实际与实务3C框架课题组编》:3C框架是指Control, Compliance, and Culture,这两本书籍讨论了如何构建全面的风险管理体系,涵盖了控制机制、合规要求和企业文化...
【测试组内部培训模版】是一个为新入职员工设计的培训材料,主要目的是介绍公司的产品、业务、技术栈以及测试工程师在岗位上可能涉及到的技术。这份PPT旨在帮助新员工快速融入团队,理解公司架构,并掌握必要的工作...
这些书籍主要涵盖了BOT项目运作、工程治理、危险管理和企业风险管理等多个方面,对于理解与实践BOT(Build-Operate-Transfer,建设-经营-转让)项目的全过程具有重要参考价值。以下是这些书籍涉及的主要知识点: 1....
这些书籍主要涵盖了BOT项目运作、工程治理、危险管理和企业风险管理等多个方面,对于理解与实践BOT(Build-Operate-Transfer,建设-经营-转让)项目和相关工程领域具有很高的参考价值。以下是各书籍的主要知识点: ...
- **项目管理**:支持项目组内的任务分配、进度跟踪等协作需求。 - **知识分享**:搭建专门的知识库,鼓励员工分享经验技巧,促进知识积累。 - **文化建设**:开展文化活动、节日祝福等活动,增进团队凝聚力。 通过...
书目可能涵盖了经典的技术书籍、在线教程、实战项目案例等,帮助你系统地复习和深入理解面试中可能遇到的知识点。 总的来说,准备华为的面试不仅是技术上的较量,更是全方位能力的展示。只有不断学习和实践,才能在...
在深入VHDL语言的同时,作者还会引导读者理解FPGA的工作原理和内部结构。FPGA(Field-Programmable Gate Array)是可编程逻辑器件,其灵活性使得它们在各种应用中都有广泛使用,如通信、图像处理、嵌入式系统等。书...
9. **项目实践**:书籍通常会包含一些实际项目,比如制作简单的电子表、温度计,或者设计一个控制电机的系统,以帮助你将理论知识应用于实际。 通过这些书籍的学习,你不仅可以掌握单片机的理论知识,还能获得实践...
《UML书籍对项目整个设计的过程》是一本深入探讨如何运用统一建模语言(Unified Modeling Language,简称UML)进行面向对象软件系统设计的指南。它涵盖了从基础概念到高级特性的全面内容,旨在帮助读者理解和掌握UML...
- **项目组会议**:定期召开项目组会议,讨论项目进展及遇到的问题。 - **项目计划更新**:根据项目实际情况调整项目计划。 ##### 10. 项目时间表 - **项目里程碑时间表**:设定项目的关键时间节点。 - **项目详细...
本书籍“iBATIS 框架源码剖析”提供了对iBATIS框架深入理解的机会,通过源代码分析,帮助读者掌握其内部工作原理。源代码带有详尽的注释,使得学习过程更为直观和高效。 iBATIS的核心概念主要有以下几个方面: 1. ...
下面将详细探讨软件测试中涉及的知识点以及推荐的相关书籍。 1. 黑盒测试设计:黑盒测试是一种不考虑内部结构,仅关注软件功能的测试方法。测试人员根据需求规格说明书,设计各种输入条件和预期结果,验证软件是否...
明确项目组成员的职责分工及各自在项目中所起的作用。 **5. 经费使用** 报告项目的资金来源、预算分配以及实际支出情况,确保经费使用的合理性和透明度。 **6. 成果权属** 明确项目成果的所有权归属,包括专利权...
《uC/OS-III》是一本专注于实时操作系统(RTOS)的中文书籍,它详细介绍了uC/OS-III系统的设计理念、内部结构以及如何在实际项目中应用。这本书的中文翻译使得国内开发者能够更加便捷地理解和掌握这个小巧而强大的RTOS...
为了避免这类问题,项目组应建立一套需求审核机制,即先由内部团队进行初步审核,然后提交给客户进行二次审查。通过这种方式,可以及时发现并修正理解上的错误,确保需求文档的准确性。 #### 五、具体应对策略 1. ...
分标策划涉及到如何将大项目拆分成小的、可管理的部分,而项目组构建则侧重于如何构建高效的项目团队。 #### 四、计算机辅助工程项目管理 - **P3软件**:书中提到了P3软件,这是一种被广泛应用于工程项目管理的...
再者,《Liferay+in+Action》是一本实践导向的书籍,它通过实例展示了在实际项目中如何运用Liferay进行开发。书中可能涵盖了一些高级话题,如工作流定制、社交网络集成、移动应用开发等,旨在提升开发者解决实际问题...