在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。\r\n ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。\r\n ·使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程。\r\n ·包含了极具价值的可多次使用的C++和JAVA源代码\r\n ·重点讲述了如何使用UML和设计模式解决面向客户系统的问题
第Ⅰ部分 敏捷开发\r\n第一章 敏捷实践\r\n第二章 极限编程概述\r\n第三章 计划\r\n第四章 测试\r\n第五章 重构\r\n第六章 一次编程实践\r\n\r\n第Ⅱ部分 敏捷设计\r\n第七章 什么是敏捷设计\r\n第八章 单一责任原则(SRP)\r\n第九章 开放—封闭原则(OCP)\r\n第十章 Liskov替换原则(LSP)\r\n第十一章 依赖倒置原则(DIP)\r\n第十二章 接口隔离原则(ISP)\r\n\r\n第Ⅲ部分 薪水支付案例研究\r\n\r\n第十三章 COMMAND模式和ACTIVE OBJECT模式\r\n第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托\r\n第十五章 FACADE模式和MEDIATOR模式\r\n第十六章 SINGLETON模式和MONOSTATE模式\r\n第十七章 NULL OBJECT模式\r\n第十八章 薪水支付案例研究:第一次迭代开始\r\n第十九章 薪水支付案例研究:实现\r\n\r\n第Ⅳ部分 打包薪水支付系统\r\n第二十章 包的设计原则\r\n第二十一章 FACTORY模式\r\n第二十二章 薪水支付案例研究(第2部分)\r\n\r\n第Ⅴ部分 气象站案例研究\r\n\r\n第二十三章 COMPOSITE模式\r\n第二十四章 OBSERVER模式——回归为模式\r\n第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式\r\n第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API\r\n第二十七章 案例研究:气象站\r\n\r\n第Ⅵ部分 ETS案例研究\r\n\r\n第二十八章 VISITOR模式\r\n第二十九章 STATE模式\r\n第三十章 ETS框架\r\n\r\n附录
我看过很多有关软件开发方面的书籍,包括过程控制方面的、设计方面的以及最佳实践方面。确实也从其中学到了不少东西。但是,在具体的软件开发实践中,却没有取得期望的效果。经过一段时间的反思,我隐约觉得,应该还有某个存在于过程方法、设计原则以及最佳实践之外的东西来有机地把这三者结合起来,才能发挥这三者的最大效用。这种东西不是可以形式化的条条框框,而是活跃于人的大脑中的某种思维方法。看完了Robert Martin的Agile Software Development之后,我有一种豁然开朗的感觉。本书把这种思维方法阐述的再清晰不过。 本书具有两大特色。第一,很多讲述软件开发的书籍,要么是仅仅涉及过程方法方面的内容,要么是仅仅涉及设计原则方面的内容。这些做法相对于整个软件开发活动来说都是片面的。其实,过程方法、设计原则以及最佳实践是一个不可分割的整体。孤立地去使用任何一部分都无法获得最佳的效果。最有效的方法应该是根据自己开发团队的实际情况,找出一种能够有效地把这三者结合起来并使它们相互支持的方法。比如,大家都知道每周(日)构建是一种得到广泛认可的最佳实践方法,但并不是只要你每周(日)都去构建了,就能得到好的效果,有时,结果可能会更糟。要想使这种方法有效,还需要其他方面的支援。每周(日)构建的前提是软件必须是易于每周(日)构建的。也就是说,你需要对软件中的依赖关系进行管理,使之具有每周(日)构建的基础。而这种依赖关系的管理是需要设计原则来指导和度量的。这只是其中一个例子,本书中到处都体现着作者的这种主导思想和实践。如果读者能够在这个方面好好体会的话,肯定会对软件开发有一个更为全面、深入的理解,从而可以更加有效的去使用这些过程方法、设计原则以及最佳实践。
第二,本书的核心是软件设计,但是它对软件设计的理解以及讲解方式非常的特别。许多有关软件设计的书籍中,要么先讲述一些设计原则、模式,然后再给出几个简单的在理想情况下的应用;要么是拿一个最终的设计结果来剖析,然后告诉你它们是多么的优美。当时,你可能真会那么认为,但是当你试图在自己的实际开发中应用时,总会发现情况是完全不一样的。此时,你要么束手无策,要么会误用设计原则、模式。究其原因,主要是因为,在此类书中所讲述的不是真正的设计,只是设计的部分内容,而忽略了设计中最为重要的方面。设计是人的思维的一种动态活动,是设计者针对自己的问题的思索、权衡、折中、选择的过程。其中会出现很多在理想情况下不会出现的问题,对这些问题的处理水平才是真正的设计水平。同样,本书中到处都是这样的思考过程。针对每个案例,作者都会和你一起思索、一起探讨、一起权衡、一起验证。本书中所展示的是一个个完整的设计活动过程。通过这些案例的学习,相信读者肯定会对设计有一个更深刻的理解。此外,本书中也讲述了很多的设计模式,但是和很多其他讲述模式的书不同的是,它更多的是在告诉你什么时候不要去使用模式,去抵制模式的诱惑,以免带来不必要的复杂性。在对模式狂热吹捧的今天,本书无疑是一剂纠偏良药,可以让你更加合理、有效地使用模式。 其实,这些内容正是软件开发活动中最本质,同时也是最难以琢磨的内容。要把这些内容通过文字表达出来更是非常困难的,这也是这方面的书籍凤毛麟角的原因。然而在本书中,Rober Martin先生能把这些内容编写得如此清晰、如此易于理解,充分展示了作者深厚的技术功底和卓越的表达能力。因此,本书能从众多优秀书籍中脱颖而出获得第13届Jolt大奖,就没有什么出乎意料了。
本书主要包含4部分内容,这些内容对于今天的软件工程师都非常的重要,它们是:
●Agile方法:主要讲述了如何去使用Agile方法,其中有很大一部分内容是告诉你为什么要这样做。
●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。这是我所见过的对这方面内容讲解的最清晰、最彻底、最深刻的唯一的一本书。
●设计模式:本书中讲述了23个设计模式,并都有具体的实例。讲解的重点在如何在实际的应用中去使用模式,如何根据当前问题的上下文以及约束力去选择最适合的模式,以及何时避免使用模式。
●UML:本书不是关于UML的,但是为了让读者更好的理解书中的内容,作者使用了一些UML图来展示设计思路。同时,本书中也对如何有效的使用UML做了深入的阐述。本书中有两个附录专门对UML进行了简介。
总之,本书是写给那些一线的软件工程师的。如果你想学习UML,如果你想学习如何去设计软件,如果你想学习设计模式,如果你想学习最好的软件开发实践,那么请阅读本书。
感谢Robert Martin先生为我们写了一本如此优秀的著作,我从本书中学到了很多。我相信本书也不会令您失望。
Robert C. Martin的经典著作Agile Software Development中文版面世,这是计算机技术出版领域的一件大喜事。即使在今天技术图书市场非常繁荣的局面下,这本书的问世也仍然是值得广大开发者格外留意和关注的事件。这不仅是因为它刚刚荣获2002年度Jolt震撼大奖,更因为这本书本身的价值和独特魅力。
Robert Cecil Martin是软件开发领域里响当当的名字。1970年代,他还是个年轻小伙子的时候就是一位有名的UNIX黑客。经过长期的开发实践后,他成了软件开发领域中的知名专家。1990年代初,Rational软件公司首席科学家Grady Booch邀请他加盟,目的是要借助他丰富的实践经验,结合Booch自己的软件设计理念,开发一套创新性的软件产品。这是个什么软件呢?说起来大名鼎鼎,就是Rational ROSE的早期版本!在Rational公司期间,Martin丰富的实践经验与Booch深厚的理论功底形成了完美的组合,把面向对象设计的理论与实践推向了高峰。1994年,Grady Booch的经典著作《》问世,与此几乎同时,Martin的第一本著作Designing Object-Oriented C++ Application Using the Booch Method也由Prentice Hall出品。这两本书彼此相互辉映,当时引起了很大的反响。Martin的这本书结合了当时最流行的面向对象语言C++和最出色的面向对象设计建模方法Booch Method,以大量实例讲解技术概念和应用方法,分析透彻,讲解务实,技术精妙,在读者中声誉极佳。这本书不单为Martin确立了软件设计领域顶尖专家的地位,而且奠定了他独一无二的写作风格。Martin本人对这本书非常有感情,多年后,我给他写信谈到这本书,他还很得意地宣称,这本书是他的代表作,而且其中的大部分内容即使在今天也没有过时。没有十年磨一剑的功力,又怎能创造出长盛十年而不衰的经典?
大约2001年10月,我的一位北大的朋友给我复印了Martin那本1995年的著作,我阅读之后,大为震撼,不惜重金从国外购买原版,同时尽力向其它朋友推荐。不少朋友阅读之后兴奋不可言状,甚至曾有人说:"读此书方知什么是面向对象设计",可见评价之高。唯一可惜的是,该书年代久远,不少东西显得陈旧。很自然的,我和我的朋友们对于该书的第二版都是翘首以待。大约在2002年4月,我从Amazon上看到了该书第二版的预订。当时的名字叫做Designing Object-Oriented C++ Application Using UML。我到全球新闻组上去调查了一番之后发现,不仅是我们,整个面向对象设计开发社群都在高度关注这本书的进展。已经被冠以"鲍勃大叔"昵称的R. C. Martin曾经承诺在1998年推出此书,结果一拖再拖,抻得整个开发社群群情激愤。本书前言开头有一幅漫画插图,一位叫做Claudia Frers的女士在1999年的UML World大会上愤怒地声讨鲍勃大叔:"可是你说过去年就可以完成这本书啊!"。面对读者爱极而怒的反应,我想鲍勃大叔虽然表面上不免尴尬,内心却一定是暗自欣喜的。而包括他在内的所有人,当时可能都想不到,这本书居然还要拖上三年,才会最终以全新的面貌出现在读者面前。
我看到该书预订页面后,立刻请求一位师长帮我从Amazon上预订。之后,我就开始了漫长的等待。这是多么奇异的一段等待啊!我先是发现这本书的名字变了,变成了Designing Object-Oriented C++,没有"UML"了。书名变短了,不过看来内容是扩充了,因为预告篇幅增大到了700多页,这倒也不错。可是到了大约8月份,我突然发现,这本书不见了!在原来的网页上出现了一本名叫"Agile Software Development"的书,虽然作者也是Robert C. Martin,但只有500多页了。书名变短了,内容也缩水了!我立刻激愤,想不到Amazon也会来偷梁换柱这一招!忍耐了一段时间之后,我跑到comp.object上,见人就问:"您知道Bob大叔的那本C++书第二版哪去了?那本Agile Software Development是怎么回事?我的money还要得回来吗?…"其实我很清楚,Bob大叔本人就经常在这一片活动,我这招叫做"敲山震虎",这么一搅和,迟早Bob大叔本人会出来解释的。果不其然,两天之后,我收到署名"Uncle Bob"的一封来信,信中客气地说,这本Agile Software Development就是原来那本书的第二版。不过内容、风格已经完全变化了,应该算是一本全新的书。虽然书中大多数代码是用Java写的,但是Bob大叔向我保证,这本书的内容绝对对得起我付出的每分真金白银。
OK,我还有什么可说的呢?Bob大树亲自出来解释,我当然满意了。在这个圈子里,如果连他都信不过,那还能相信谁?
2002年10月底,一个大大的包裹放到了我的桌子上--ASD到了。从1995年第一版面世算起,整个面向对象设计社群经过了七年的漫长等待,终于等到了这本书。在这七年中,斗转星移,物是人非,多少英雄起来又落下,多少神话创生又破灭,当这本硬壳封面的精美图书沉甸甸地放在手上,怎能不让人感慨!
其时不单国内很少有人拿到这本书,就是在美国,该书签名首发的活动也还在筹备中。因此,我可以有把握的说,我是全国最早阅读此书的五人之一。
阅读这本书的过程,是一个充满了发现、领悟和兴奋的过程。我只读了其中几个章节,就已经知道这本书大大超过了事前的预期,是当代软件开发领域最杰出的著作之一。这个时候,Software Development Magazine每年一度的Jolt评奖工作正式开始,我冲到投票网站,毫不犹豫地给这本ASD投了一票。事后我愉快地得知,此书果然如我所愿地夺得了去年技术图书类最高奖项--Jolt震撼大奖。在阅读全书大约三分之一之后,我对于该书的主要特点和内容架构已经有了把握,于是跑到Amazon网站上,给该书写下了一篇评论,题目是:本年度的最佳设计类图书,在书评中我简单介绍了书的特点,并且做出结论:这本书不但肯定是2002年度最好的设计类技术图书,而且在今后的几年中,很难出现比它更好的作品。那篇短评是Amazon网站上对该书的第四篇评论,现在给这本书的评论大概已经几十篇了。回过头来看,能够为这本书的宣传做一点点事情,我感到非常高兴。
当然,这并不是说我"慧眼独具",业内经验丰富、感官敏锐的高手大有人在。我听说在台湾,三位资深工程师联名上书某出版公司要求引进此书,并且自告奋勇去翻译。这些资深工程师收入丰厚,根本不是为了那点微薄的翻译酬劳而折腰,完全是希望能够把这本极有价值的好书介绍给更多的业内人士,造福大众。一本书能够引起这么大的热诚,可见它本身的魅力了。
那么究竟这本书好在哪里呢?真正关心这个问题的读者,应该去阅读原著。任何第三方的评价,对于这本书来说,都只能是一种实质上的贬抑。Bob大叔是个实践大师,读者必须通过阅读实践,才能够真正体会到这本书的精妙之处。我只能谈谈这本书给我印象最深的三个特点,难免挂一漏万。
首先,该书延续了Bob大叔著作的一贯特色,以实例为本,不尚空谈,因此格外真实,摄人心魄。Martin从多年的写作中提炼出一种独特的风格,就是"引领式传授"。与别的作者不同,面对问题,Martin不是把最后那个完美的答案一下子放在你面前,让你拜倒在他脚下,被他的睿智折服。他很清楚,当读者在大师面前拜倒时,内心充满了挫折感,同时会丧失自信。而自信是一个设计者由成功走向成功的最关键因素。因此,Martin还原了一个真实的设计过程--带领着读者一起设计。读者在书中能够看到,他也会犯错误,也要面临痛苦的选择,也会做一些愚蠢的决定,也会被一些"激动人心"的想法诱惑,但是,最后他能够跨越重重荆棘,看透重重迷雾,得到优秀的设计。他跟我们一样,是一个有血有肉的设计者,而不是什么天赋异禀的天才。正因为如此,他能达到的,我们也能达到。这样的风格,使我们从阅读中能够逐渐体会到软件设计最精髓的东西:张力与平衡。如何选择,如何思考,如何面对困境,这些才是最宝贵的财富。这些财富,就在我们自己的大脑里,而Martin的书,就是打开这个财富宝库的钥匙。此外,读者在阅读这本书的时候会发现,Martin在教授具体技术的时候,始终以实例教学为主。比如附录中教授UML,就是通过两个实例来教授UML基础知识。诸位不妨从这两个附录开始阅读此书,体会一下作者的风格,看一看在UML学习方面,究竟是传统的罗列式教材给你的印象更深,还是以实例为依托的Martin式风格更有效率。
其次,详略得当。Martin很清楚哪些东西应该讲的细致一些,哪那些东西可以讲的抽象一些。这一点也是大师风范。软件设计这个领域,有很多东西是应该讲清楚,却很少有人能讲清楚的,比如设计中的权衡,实例的综合运用。还有很多东西,是没有必要长篇大论的,却被很多人拿来喋喋不休,比如说一些基本的设计原则或模式,一些开发过程思想,一些技术理念等等。这些东西讲得简明扼要能够给人以智慧的启迪,讲得冗长拖沓,定下几十上百条规则方法,则必然脱离实际,堵塞和束缚读者的思想。可惜很多作者不明白这个道理,或者是虽然明白但是假装不明白,把很多简明睿智的概念变成了又臭又长的裹脚布。Martin的书则决无此弊。这也应当归功与他多年的实践经验。从这本书中我们可以看到,他对于思想和原则一般是言简意赅,意到为止。而对于有助于提高读者实际设计能力的实