敏捷软件开发:原则、模式与实践:C#版(软件开发的不朽经典)
基本信息
- 作者: (美)Robert C.Martin Micah Martin [作译者介绍]
- 译者: 邓辉 孙鸣
- 丛书名: 图灵程序设计丛书 软件工程系列
- 出版社:人民邮电出版社
- ISBN:9787115239976
- 上架时间:2010-11-22
- 出版日期:2010 年12月
- 开本:16开
- 页码:538
- 版次:2-1
- 所属分类:
计算机 > 软件与程序设计 > C#
编辑推荐
软件开发的不朽经典
生动阐述面向对象原则、敏捷实践、MML和模式
大量C#实战示例,让你亲历现场
内容简介回到顶部↑
《敏捷软件开发:原则、模式与实践(c#版)》凝聚了世界级软件开发大师robert c. martin数十年软件开发和培训经验,java版曾荣获计算机图书最高荣誉——jolt大奖,是广受推崇的经典著作,自出版以来一直畅销不衰。要想成为一名优秀的软件开发人员,需要熟练应用编程语言和开发工具,更重要的是能够领悟优美代码背后的原则和前人总结的经验——这正是《敏捷软件开发:原则、模式与实践(c#版)》的主题。
不要被书名误导了,《敏捷软件开发:原则、模式与实践(c#版)》不是那种以开发过程为主题的敏捷软件开发类图书。在书中,作者延续了自己一贯的写作风格,让你亲历现场,并用幽默亲切的语言和插图,通过一步步展示来自开发一线的代码,分析各种设计决策及其得失,以清晰、易于理解的方式讲述了真实程序设计中最基本然而也是最难做到正确应用的原则(包括srp、lsp、ocp、dip、isp等类设计原则,以及多个包设计原则)与设计模式(不限于gof经典模式,包括许多作者自己的成果)。
《敏捷软件开发:原则、模式与实践(c#版)》不仅是一部深入浅出、生动易懂的面向对象原则与设计模式著作,而且还是一部通俗的敏捷方法导引书和快速实用的uml教程。通过《敏捷软件开发:原则、模式与实践(c#版)》你会发现,许多以前开起来非常枯燥费解的概念,突然间都豁然开朗,变得鲜活生动起来。
c#版与此前的java版相比,主要的更新包括加强了uml的介绍章节,使其更贴近实战,增加了对mvp模式的介绍等。
不要被书名误导了,《敏捷软件开发:原则、模式与实践(c#版)》不是那种以开发过程为主题的敏捷软件开发类图书。在书中,作者延续了自己一贯的写作风格,让你亲历现场,并用幽默亲切的语言和插图,通过一步步展示来自开发一线的代码,分析各种设计决策及其得失,以清晰、易于理解的方式讲述了真实程序设计中最基本然而也是最难做到正确应用的原则(包括srp、lsp、ocp、dip、isp等类设计原则,以及多个包设计原则)与设计模式(不限于gof经典模式,包括许多作者自己的成果)。
《敏捷软件开发:原则、模式与实践(c#版)》不仅是一部深入浅出、生动易懂的面向对象原则与设计模式著作,而且还是一部通俗的敏捷方法导引书和快速实用的uml教程。通过《敏捷软件开发:原则、模式与实践(c#版)》你会发现,许多以前开起来非常枯燥费解的概念,突然间都豁然开朗,变得鲜活生动起来。
c#版与此前的java版相比,主要的更新包括加强了uml的介绍章节,使其更贴近实战,增加了对mvp模式的介绍等。
作译者回到顶部↑
本书提供作译者介绍
Robert C. Martin(“Bob”大叔)世界级的软件开发大师,著名软件咨询公司Object Mentor公司的创始人和总裁。曾担任C++ Report杂志主编多年,也是设计模式和敏捷开发运动的主要倡导者之一。
Micah Martin Robert C. Martin之子,也是经验丰富的软件工程师,曾任Object Mentor公司的咨询师,现任8th Light公司总裁。擅长.NET、面向对象技术、模式和敏捷开发。他是开源测试工具FitNesse的主要开发者。
.. << 查看详细
目录回到顶部↑
第一部分 敏捷开发
第1章 敏捷实践 3
1.1 敏捷联盟 4
1.1.1 人和交互重于过程和工具 4
1.1.2 可以工作的软件重于面面
俱到的文档 5
1.1.3 客户合作重于合同谈判 5
1.1.4 随时应对变化重于遵循计划 6
1.2 原则 6
1.3 结论 8
1.4 参考文献 8
第2章 极限编程概述 9
2.1 极限编程实践 9
2.1.1 完整团队 9
2.1.2 用户故事 10
2.1.3 短交付周期 10
2.1.4 验收测试 10
2.1.5 结对编程 11
2.1.6 测试驱动开发 11
2.1.7 集体所有 12
第1章 敏捷实践 3
1.1 敏捷联盟 4
1.1.1 人和交互重于过程和工具 4
1.1.2 可以工作的软件重于面面
俱到的文档 5
1.1.3 客户合作重于合同谈判 5
1.1.4 随时应对变化重于遵循计划 6
1.2 原则 6
1.3 结论 8
1.4 参考文献 8
第2章 极限编程概述 9
2.1 极限编程实践 9
2.1.1 完整团队 9
2.1.2 用户故事 10
2.1.3 短交付周期 10
2.1.4 验收测试 10
2.1.5 结对编程 11
2.1.6 测试驱动开发 11
2.1.7 集体所有 12
译者序回到顶部↑
2002年10月,“Bob大叔”(RobertC.Martin)终于推出了软件开发社团期待已久的Agile Software Development,Princ扣les,Patterns,andPractices一书。该书以真实案例为基础,通过真实开发场景再现的方式对软件开发中涉及的各种知识及其有效的运用方法进行了讲解。这种做法得到了广大软件从业人员的“致认可。该书一出版就好评如潮,并毫无争议地获得了第13届软件开发图书类的Jolt大奖。
次年,“Bob大叔”又推出了另外一本书UML扣rJavaProgrammers。该书秉承了上一本书的讲解风格,不过其重点在于UML。“Bob大叔”在书中介绍了一些常用的UML特性:更为重要的是,他把重点放在了如何在真实的项目开发中,以注重实效的态度宋使用UML。对于那些习惯寸:动辄画数十页精美的UML图,并把这些UML图当成真正的软件设计的架构师们来说,该书无疑是对他们的当头棒喝。
应该说,这两本书中所教授的内容和思维方法是与具体编程语言无关的,但是许多软件开发人员还是很希望这些知识能够基寸:自己特定的语言和开发平台进行讲解。作为一名资深的软件咨询大师,“Bob大叔”当然很清楚这一点。为了让.NET开发社团也能够像Java社团那样,学习到这些可以改善软件开发状况,并让程序员感受到开发乐趣的敏捷开发和敏捷设计的权威知识,“Bob大叔”于2006年7月推出了一本新书Agile Principles,Patterns,and Practices in C#,也就是读者正在阅读的这本书。按照“Bob大叔”的说法,这本书是他前两本书的合订本。
在本书中,“Bob大叔”去除了前两本书中的重复内容,并把它们有机地融合在一起。此外,对于书中的案例也做了相应的调整,去掉了不为大多数开发人员熟悉的气象站案例以及略显仓促的ETS案例。“Bob大叔”对具有典型代表性的薪水支付应用案例进行了增强,使其贯穿全书,并增加了关于数据库和MVP模式两章内容使得该案例更加完整。这种做法使得本书读起来更加顺畅。读者花本书的价格买到“Bob大叔”的两本经典著作,从某种意义上来讲可以看作是“Bob大叔”对.NET社团作出的补偿。
能够在4年后再次翻译“Bob大叔”的这本新书,对我个人而言,既是一种荣幸,同时也是对这几年敏捷开发实践的一次难得的反思、总结以及再学习的机会。曾经有读者认为本书中讲的东西太多、太杂,很多内容完全可以独立成书,放在一起显得比较散乱。我不认同这种观点。敏捷开发的核心就是以最低的成本,最快速地为客户提供价值。书中所讲述的过程方法、实践、设计原则、模式以及思考方式看似独立,其实都围绕在这个核心周围,并以相互支援的方式为达成这个核心目标服务。为了能够快速提供价值,我们应用短迭代、快速交付的开发方法;为了保证这些价值是客户真正需要的,我们和客户紧密合作并应用反馈驱动的方法;为了能够降低软件的演化和维护成本,我们应用好的设计原则和模式;为了降低设计成本,我们采用测试驱动、随时重构、演化设计的方法……如果能够以这个核心为主线去理解和学习书中教授的内容,效果应该会更好一些。我这几年的实践经历也证实了这一点。
软件开发应该是一项充满快乐和激情的工作,衷心希望本书能够帮助国内.NET社团的程序员朋友体会到这种快乐和激情。
邓辉
次年,“Bob大叔”又推出了另外一本书UML扣rJavaProgrammers。该书秉承了上一本书的讲解风格,不过其重点在于UML。“Bob大叔”在书中介绍了一些常用的UML特性:更为重要的是,他把重点放在了如何在真实的项目开发中,以注重实效的态度宋使用UML。对于那些习惯寸:动辄画数十页精美的UML图,并把这些UML图当成真正的软件设计的架构师们来说,该书无疑是对他们的当头棒喝。
应该说,这两本书中所教授的内容和思维方法是与具体编程语言无关的,但是许多软件开发人员还是很希望这些知识能够基寸:自己特定的语言和开发平台进行讲解。作为一名资深的软件咨询大师,“Bob大叔”当然很清楚这一点。为了让.NET开发社团也能够像Java社团那样,学习到这些可以改善软件开发状况,并让程序员感受到开发乐趣的敏捷开发和敏捷设计的权威知识,“Bob大叔”于2006年7月推出了一本新书Agile Principles,Patterns,and Practices in C#,也就是读者正在阅读的这本书。按照“Bob大叔”的说法,这本书是他前两本书的合订本。
在本书中,“Bob大叔”去除了前两本书中的重复内容,并把它们有机地融合在一起。此外,对于书中的案例也做了相应的调整,去掉了不为大多数开发人员熟悉的气象站案例以及略显仓促的ETS案例。“Bob大叔”对具有典型代表性的薪水支付应用案例进行了增强,使其贯穿全书,并增加了关于数据库和MVP模式两章内容使得该案例更加完整。这种做法使得本书读起来更加顺畅。读者花本书的价格买到“Bob大叔”的两本经典著作,从某种意义上来讲可以看作是“Bob大叔”对.NET社团作出的补偿。
能够在4年后再次翻译“Bob大叔”的这本新书,对我个人而言,既是一种荣幸,同时也是对这几年敏捷开发实践的一次难得的反思、总结以及再学习的机会。曾经有读者认为本书中讲的东西太多、太杂,很多内容完全可以独立成书,放在一起显得比较散乱。我不认同这种观点。敏捷开发的核心就是以最低的成本,最快速地为客户提供价值。书中所讲述的过程方法、实践、设计原则、模式以及思考方式看似独立,其实都围绕在这个核心周围,并以相互支援的方式为达成这个核心目标服务。为了能够快速提供价值,我们应用短迭代、快速交付的开发方法;为了保证这些价值是客户真正需要的,我们和客户紧密合作并应用反馈驱动的方法;为了能够降低软件的演化和维护成本,我们应用好的设计原则和模式;为了降低设计成本,我们采用测试驱动、随时重构、演化设计的方法……如果能够以这个核心为主线去理解和学习书中教授的内容,效果应该会更好一些。我这几年的实践经历也证实了这一点。
软件开发应该是一项充满快乐和激情的工作,衷心希望本书能够帮助国内.NET社团的程序员朋友体会到这种快乐和激情。
邓辉
前言回到顶部↑
可是Bob,你说过去年就能写完这本书的。
——Claudia Frers, 1999年UML World大会
Bob的导言
离Claudia说出这句合情合理的抱怨已经7年了,不过我觉得我已经做出了补偿。在这几年里,我出版了3本书,对于一个同时经营着一家咨询公司,并且还得进行大量的代码编写、培训、指导、演讲的工作,以及撰写文章、专栏和博客的人来讲,要每隔一年出一本书是一项很大的挑战,更不要说还得养活并陪伴一个大家庭了。但是,我喜欢这样。
敏捷开发(Agile Development)就是指能够在需求迅速变化的情况下快速开发软件。为了达到这种敏捷性,我们需要使用一些实践提供必要的准则和反馈,需要使用一些设计原则使我们的软件保持灵活且可维护,还需要理解一些已经被证明在特定问题中可以权衡这些原则的设计模式。本书试图将这3个概念融汇起来,使它们成为有机的整体。
本书首先描述了这些原则、模式以及实践,然后通过许多案例来演示如何应用它们。更重要的是,案例给出的并不是最终的结果,而是设计的过程。你会看到设计者犯错误;你会看到他们如何找到错误并最终改正;你会看到他们对问题苦思冥想,面对一些难以权衡的含糊问题的疑惑与探索。是的,你会看到设计的真正历程。
Micah的导言
2005年初,我参与到一个小的开发团队中,该团队正准备用C#开发一个.NET应用程序。使用敏捷开发实践是团队的强制性规定,这也是我参与其中的原因之一。虽然我以前曾经使用过C#,但是我的大部分编程经验都是基于Java和C++的。我认为.NET不会有什么不同,结果也表明确实如此。
项目开始两个月后,我们进行了第一次发布。这是一次部分发布,其中只包含了所有计划特性中的一部分,但却是完全可用的,并且也确实被投入使用。仅仅两个月公司就得到了我们开发的软件带来的好处。管理层非常兴奋,他们要求雇佣更多的人,这样就可以启动更多的项目。
我投身到敏捷社区已经有几年了,我认识很多可以帮助我们的敏捷开发者。我通知了他们每一个人,请求他们加入到我们中来。结果,没有一个敏捷朋友加入我们的团队。为什么?也许最主要的原因是我们是基于.NET进行开发的。
几乎所有敏捷开发者都具有Java、C++或者Smalltalk方面的背景。几乎从来没有听说过有敏捷.NET程序员。也许,当我说我们正在使用.NET进行敏捷软件开发时,我的那些朋友根本就没当回事,也许他们想避免和.NET有什么瓜葛。这是一个严重的问题。我已经不止一次看到这种情况了。
我讲过许多为期一周的关于各种软件主题的课程,有机会见到来自世界各地的具有广泛代表性的开发者。我曾经指导过的很多学生都是.NET程序员,也有很多是Java和C++程序员。恕我直言:在我的经历中,.NET程序员常常要比Java和C++程序员差一些。显然,也并非总是如此。但是,通过在课堂中的再三观察,我只能得出这样的结论:在敏捷软件实践、设计模式、设计原则等方面,.NET程序员往往要弱一些。在我的课堂上,.NET程序员常常从来没有听说过这些基本概念。必须改变这种情况。
本书的另一版本,由我父亲Robert C. Martin撰写的Agile Software Development: Principles, Patterns, and Practices在2002年末出版,并赢得了2003年的Jolt大奖。那是一本很好的书,得到了许多开发者的赞扬。遗憾的是,它对.NET社区几乎没有提供什么帮助。尽管书中的内容同样适用于.NET,但是几乎没有.NET程序员读过它。
我希望这本.NET版本能够充当.NET社区和其他开发者社区之间的桥梁。我希望程序员能够阅读它并看到更好的构建软件的方法。我希望他们开始使用更好的软件实践、创建更好的设计并提升.NET应用的质量标准。我希望.NET程序员可以和其他程序员一样好。我希望.NET程序员能够在软件社区中获得新的地位,这样Java程序员就会以加入.NET团队为荣。
在完成本书的整个过程中,对于是否把我的名字放在一本与.NET有关的图书的封面上,我有过多次思想斗争。我曾问自己是否要把名字和.NET联系在一起,并承担可能由此带来的所有负面后果,但现在我不再迟疑了。我是一名.NET程序员。不!是一名敏捷的.NET程序员。我以此为荣。
关于本书
本书简史
20世纪90年代初,我(Bob)写了一本名为Designing Object-Oriented C++ Application using the Booch Method的书。它曾是我的代表作,其效果和销量都让我非常高兴。
这本书最初想作为Designing一书的第2版,但是结果却并非如此。书中所保留的原书内容非常少,只有3章内容,即使这3章也进行了大量的修改,但书的意图、精神以及许多知识是相同的。自Desinging出版10年以来,在软件设计和开发方面我又学到了非常多的知识,这些将在本书中表现出来。
十年过去了!Designing刚好在因特网大发展之前出版。从那时起,我们使用的缩略词的数量已经翻了一倍,诸如EJB、RMI、J2EE、XML、XSLT、HTML、ASP、JSP、ZOPE、SOAP、C#、.NET以及设计模式、Java、Servelet和应用服务器。我要告诉你,要使这本书的内容跟得上最新技术潮流非常困难。
——Claudia Frers, 1999年UML World大会
Bob的导言
离Claudia说出这句合情合理的抱怨已经7年了,不过我觉得我已经做出了补偿。在这几年里,我出版了3本书,对于一个同时经营着一家咨询公司,并且还得进行大量的代码编写、培训、指导、演讲的工作,以及撰写文章、专栏和博客的人来讲,要每隔一年出一本书是一项很大的挑战,更不要说还得养活并陪伴一个大家庭了。但是,我喜欢这样。
敏捷开发(Agile Development)就是指能够在需求迅速变化的情况下快速开发软件。为了达到这种敏捷性,我们需要使用一些实践提供必要的准则和反馈,需要使用一些设计原则使我们的软件保持灵活且可维护,还需要理解一些已经被证明在特定问题中可以权衡这些原则的设计模式。本书试图将这3个概念融汇起来,使它们成为有机的整体。
本书首先描述了这些原则、模式以及实践,然后通过许多案例来演示如何应用它们。更重要的是,案例给出的并不是最终的结果,而是设计的过程。你会看到设计者犯错误;你会看到他们如何找到错误并最终改正;你会看到他们对问题苦思冥想,面对一些难以权衡的含糊问题的疑惑与探索。是的,你会看到设计的真正历程。
Micah的导言
2005年初,我参与到一个小的开发团队中,该团队正准备用C#开发一个.NET应用程序。使用敏捷开发实践是团队的强制性规定,这也是我参与其中的原因之一。虽然我以前曾经使用过C#,但是我的大部分编程经验都是基于Java和C++的。我认为.NET不会有什么不同,结果也表明确实如此。
项目开始两个月后,我们进行了第一次发布。这是一次部分发布,其中只包含了所有计划特性中的一部分,但却是完全可用的,并且也确实被投入使用。仅仅两个月公司就得到了我们开发的软件带来的好处。管理层非常兴奋,他们要求雇佣更多的人,这样就可以启动更多的项目。
我投身到敏捷社区已经有几年了,我认识很多可以帮助我们的敏捷开发者。我通知了他们每一个人,请求他们加入到我们中来。结果,没有一个敏捷朋友加入我们的团队。为什么?也许最主要的原因是我们是基于.NET进行开发的。
几乎所有敏捷开发者都具有Java、C++或者Smalltalk方面的背景。几乎从来没有听说过有敏捷.NET程序员。也许,当我说我们正在使用.NET进行敏捷软件开发时,我的那些朋友根本就没当回事,也许他们想避免和.NET有什么瓜葛。这是一个严重的问题。我已经不止一次看到这种情况了。
我讲过许多为期一周的关于各种软件主题的课程,有机会见到来自世界各地的具有广泛代表性的开发者。我曾经指导过的很多学生都是.NET程序员,也有很多是Java和C++程序员。恕我直言:在我的经历中,.NET程序员常常要比Java和C++程序员差一些。显然,也并非总是如此。但是,通过在课堂中的再三观察,我只能得出这样的结论:在敏捷软件实践、设计模式、设计原则等方面,.NET程序员往往要弱一些。在我的课堂上,.NET程序员常常从来没有听说过这些基本概念。必须改变这种情况。
本书的另一版本,由我父亲Robert C. Martin撰写的Agile Software Development: Principles, Patterns, and Practices在2002年末出版,并赢得了2003年的Jolt大奖。那是一本很好的书,得到了许多开发者的赞扬。遗憾的是,它对.NET社区几乎没有提供什么帮助。尽管书中的内容同样适用于.NET,但是几乎没有.NET程序员读过它。
我希望这本.NET版本能够充当.NET社区和其他开发者社区之间的桥梁。我希望程序员能够阅读它并看到更好的构建软件的方法。我希望他们开始使用更好的软件实践、创建更好的设计并提升.NET应用的质量标准。我希望.NET程序员可以和其他程序员一样好。我希望.NET程序员能够在软件社区中获得新的地位,这样Java程序员就会以加入.NET团队为荣。
在完成本书的整个过程中,对于是否把我的名字放在一本与.NET有关的图书的封面上,我有过多次思想斗争。我曾问自己是否要把名字和.NET联系在一起,并承担可能由此带来的所有负面后果,但现在我不再迟疑了。我是一名.NET程序员。不!是一名敏捷的.NET程序员。我以此为荣。
关于本书
本书简史
20世纪90年代初,我(Bob)写了一本名为Designing Object-Oriented C++ Application using the Booch Method的书。它曾是我的代表作,其效果和销量都让我非常高兴。
这本书最初想作为Designing一书的第2版,但是结果却并非如此。书中所保留的原书内容非常少,只有3章内容,即使这3章也进行了大量的修改,但书的意图、精神以及许多知识是相同的。自Desinging出版10年以来,在软件设计和开发方面我又学到了非常多的知识,这些将在本书中表现出来。
十年过去了!Designing刚好在因特网大发展之前出版。从那时起,我们使用的缩略词的数量已经翻了一倍,诸如EJB、RMI、J2EE、XML、XSLT、HTML、ASP、JSP、ZOPE、SOAP、C#、.NET以及设计模式、Java、Servelet和应用服务器。我要告诉你,要使这本书的内容跟得上最新技术潮流非常困难。
序言回到顶部↑
写这篇序时,我刚刚交付了Eclipse开源项目的一个主要版本。我仍然处在恢复阶段,思维还有些模糊。但是有一件事情我却比以往更加清楚,那就是:交付产品的关键因素是人,而不是过程。我们成功的诀窍很简单:和那些全心致力于交付软件的人一起工作,使用适合于自己团队的轻量过程进行开发,并且不断调整。
看看我们团队中的开发人员,他们都将编程视为了开发活动的中心。他们不仅编写代码,还努力参悟代码,以保持对系统的理解。使用代码验证设计,从中得到的反馈对于增强设计的信心至关重要。同时,我们的开发人员理解模式、重构、测试、增量交付、频繁构建和其他一些XP(极限编程)最佳实践的重要性。这些实践改变了我们对开发方法的认识。
对于那些具有高技术风险以及需求经常变化的项目来说,熟练地掌握这种开发方式是取得成功的先决条件。虽然敏捷开发不注重形式和文档,但是非常强调日常开发实践。让这些实践付诸实施,正是本书的中心内容。
Robert是面向对象社区的一位活跃分子,对于C什开发、设计模式以及面向对象设计的一般原则贡献颇多,同时他很早就是一位XP和敏捷方法的积极提倡者。本书就以他的众多贡献为基础,全面讲述了敏捷开发实践。这真是一项了不起的成就。不仅如此,Robert在说明每个问题时,还使用了案例和大量的代码,这与敏捷实践完全相符。他实际上是在通过实际编程来阐述编程和设计。
本书中充满了对于软件开发的真知灼见。不管你是想成为一位敏捷(agile)开发人员,还是想进一步提高自己的技能,它都同样有用。我对本书期盼已久,它没有令我失望。
看看我们团队中的开发人员,他们都将编程视为了开发活动的中心。他们不仅编写代码,还努力参悟代码,以保持对系统的理解。使用代码验证设计,从中得到的反馈对于增强设计的信心至关重要。同时,我们的开发人员理解模式、重构、测试、增量交付、频繁构建和其他一些XP(极限编程)最佳实践的重要性。这些实践改变了我们对开发方法的认识。
对于那些具有高技术风险以及需求经常变化的项目来说,熟练地掌握这种开发方式是取得成功的先决条件。虽然敏捷开发不注重形式和文档,但是非常强调日常开发实践。让这些实践付诸实施,正是本书的中心内容。
Robert是面向对象社区的一位活跃分子,对于C什开发、设计模式以及面向对象设计的一般原则贡献颇多,同时他很早就是一位XP和敏捷方法的积极提倡者。本书就以他的众多贡献为基础,全面讲述了敏捷开发实践。这真是一项了不起的成就。不仅如此,Robert在说明每个问题时,还使用了案例和大量的代码,这与敏捷实践完全相符。他实际上是在通过实际编程来阐述编程和设计。
本书中充满了对于软件开发的真知灼见。不管你是想成为一位敏捷(agile)开发人员,还是想进一步提高自己的技能,它都同样有用。我对本书期盼已久,它没有令我失望。
【插图】








点击看大图







加载中...

