重构与模式(荣获第15届生产效率大奖、帮你打通重构与模式任督二脉 )
基本信息
- 原书名: Refactoring to Patterns
- 原出版社: Addison-Wesley
- 作者: (美)Joshua Kerievsky [作译者介绍]
- 译者: 杨光 刘基诚
- 丛书名: 图灵程序设计丛书·程序员修练系列
- 出版社:人民邮电出版社
- ISBN:7115153361
- 上架时间:2006-11-13
- 出版日期:2006 年12月
- 开本:16开
- 页码:296
- 版次:1-1
- 所属分类:
计算机 > 软件工程及软件方法学 > 综合
教材 > 研究生/本科/专科教材 > 工学 > 计算机
编辑推荐
本书荣获第15届生产效率大奖!
《设计模式》和《重构》之后又一里程碑性著作
凝聚众多业界专家经验与领悟
程序内功修炼秘笈
帮你打通重构与模式任督二脉
推荐阅读
内容简介回到顶部↑
本书开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。本书不仅展示了一种应用模式和重构的创新方法,而且有助于读者结合实战深入理解重构和模式。书中讲述了27种重构方式。.
本书适于面向对象软件开发人员阅读,也可作为高校计算机专业、软件工程专业师生的参考读物。
1994年,《设计模式》为我们带来了常见设计问题的经典解决方案,从而改变了整个面向对象开发的面貌。
1999年,《重构》为我们带来了一种改进代码的高效过程,从而彻底改变了面向对象设计的方式。..
现在,在众所期盼之中,joshua kerievsky的《重构与模式》第一次深入和全面地论述了设计模式的运用与演进式的重构过程,并揭示了两者之间至关重要的联系,又一次革命性地改变了我们的设计方式。
本书阐述了模式导向重构的理论与实践,提出使用模式改善既有设计优于在设计早期使用模式的重要观点。书中包含了27种模式导向重构,每种重构通过一系列较小的重构,安全地在设计中实现、趋向和去除模式。实例均出自真实项目的代码。通过本书,读者不仅能够更好地学习和理解模式和重构,了解两个领域的新进展和业界最新领悟,还能够学到实战中实现模式的多种方式,学会如何在不同情况下进行选择。...
本书适于面向对象软件开发人员阅读,也可作为高校计算机专业、软件工程专业师生的参考读物。
1994年,《设计模式》为我们带来了常见设计问题的经典解决方案,从而改变了整个面向对象开发的面貌。
1999年,《重构》为我们带来了一种改进代码的高效过程,从而彻底改变了面向对象设计的方式。..
现在,在众所期盼之中,joshua kerievsky的《重构与模式》第一次深入和全面地论述了设计模式的运用与演进式的重构过程,并揭示了两者之间至关重要的联系,又一次革命性地改变了我们的设计方式。
本书阐述了模式导向重构的理论与实践,提出使用模式改善既有设计优于在设计早期使用模式的重要观点。书中包含了27种模式导向重构,每种重构通过一系列较小的重构,安全地在设计中实现、趋向和去除模式。实例均出自真实项目的代码。通过本书,读者不仅能够更好地学习和理解模式和重构,了解两个领域的新进展和业界最新领悟,还能够学到实战中实现模式的多种方式,学会如何在不同情况下进行选择。...
作译者回到顶部↑
本书提供作译者介绍
Joshua Kerievsky资深软件设计师,软件开发公司Industrial Logic的创始人,是年轻一代软件开发方面最具人气的专家之一。他曾为许多专业杂志撰稿,交多次在世界级技术会议上担任讲师。除本书外,他还参与撰写了Extreme Programming Explored和Extreme Programming perspectives。...
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1章 本书的写作缘由 1
1.1 过度设计 1
1.2 模式万灵丹 2
1.3 设计不足 2
1.4 测试驱动开发和持续重构 3
1.5 重构与模式 5
1.6 演进式设计 6
第2章 重构 7
2.1 何谓重构 7
2.2 重构的动机 8
2.3 众目睽睽 9
2.4 可读性好的代码 10
2.5 保持清晰 11
2.6 循序渐进 11
2.7 设计欠账 12
2.8 演变出新的架构 13
2.9 复合重构与测试驱动的重构 13
2.10 复合重构的优点 15
2.11 重构工具 15
第3章 模式 17
1.1 过度设计 1
1.2 模式万灵丹 2
1.3 设计不足 2
1.4 测试驱动开发和持续重构 3
1.5 重构与模式 5
1.6 演进式设计 6
第2章 重构 7
2.1 何谓重构 7
2.2 重构的动机 8
2.3 众目睽睽 9
2.4 可读性好的代码 10
2.5 保持清晰 11
2.6 循序渐进 11
2.7 设计欠账 12
2.8 演变出新的架构 13
2.9 复合重构与测试驱动的重构 13
2.10 复合重构的优点 15
2.11 重构工具 15
第3章 模式 17
译者序回到顶部↑
设计模式和重构对我们来说早已不是什么陌生的字眼了。1994年,GoF的巨著《设计模式》初次向世人展示了设计模式的魅力。2002年,Martin Fowler的《重构:改善既有代码的设计》则刮起了一阵重构的旋风。记得在《重构》刚刚出版的时候,软件开发界和评论界就赞扬它是一本具有与《设计模式》同等高度的图书。我相信本书的每一位读者都和我一样,早已收藏了这两本书,反复阅读,仔细品味,并从中获益匪浅。
设计模式代表了传统软件开发的思想:好的设计会产生好的软件,因此在实际开发之前,值得花时间去做一个全面而细致的设计。而重构则代表了敏捷软件开发的浪潮:软件并不是在一开始就可以设计得完美无缺的,因此可以先进行实际开发,然后通过对代码不断地进行小幅度的修改来改善其设计。这两种方式看似格格不入,但是它们都在本质上有一个相同的思想——设计很重要,只是两者达到良好设计的方法不同。从设计模式和重构第一天与开发人员见面开始,它们就注定是一对休戚相关的兄弟。现在,本书终于为人们架设了一道连接设计模式与重构的桥梁。
这段时间,我总在想这样一个问题:什么是设计模式?每一类编程语言都具有其自身的特性,就面向对象编程语言来说,其特性就是抽象、封装、继承和多态。同时,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计。而设计模式则是广大软件开发人员总结出的开发经验和技巧,它们利用编程语言的特性,实现这些设计准则。因此,在有经验的软件设计师眼里,没有设计模式,只有设计准则。现在,本书作者告诉我们:重构是实现设计模式的一种手段,设计模式往往也是重构的目的。从某种意义上来说,重构成全了设计模式,而设计模式度量了重构。需要注意的是,所谓“设计模式是重构的目的”,并不是说重构的结果一定是设计模式,有些情况下,重构恰恰是为了避免设计模式的过度使用。这是本书最值得关注的地方。
在准备写这篇译者序的时候,我总是觉得很为难,因为写译者序类似于写读后感,是要道出翻译过程中的特别感受,而我在翻译的过程中并没有什么特别突兀的触动。从本书的第一个重构直到最后一个,一切都显得那么自然;作者给出的每一个建议,每一个告诫,每一次小小的改动,给我的感觉都是水到渠成的。现在想想,其实重构的魅力就在于此,它就是每个软件开发人员自然而然应该做的事情。有句话叫“绚烂之极归于平淡”,用来形容重构,真是再合适不过了。
翻译从来就不是一件轻松的事,加之我完成本书翻译的日子都是在上海炎热的夏天中度过的。每当我汗流浃背地坐在电脑前,斟酌应该如何表达作者原意的时候,我都会从作者迸发的思维和精巧的话语中感受到一种平淡而又无穷的智慧。有趣的是,我接受本书翻译邀请的那天,Martin Fowler先生正好到上海做演讲,能在这位《重构》作者的演讲堂上接受到一本重构图书的翻译邀请,真是机缘巧合。
最后,我要谢谢我的父母。是他们给了我一个健康的身体,一个良好的生活环境,更重要的是全心全意的支持。没有他们就没有这一切。爸爸妈妈,我爱你们。
译 者
2006年8月25日
设计模式代表了传统软件开发的思想:好的设计会产生好的软件,因此在实际开发之前,值得花时间去做一个全面而细致的设计。而重构则代表了敏捷软件开发的浪潮:软件并不是在一开始就可以设计得完美无缺的,因此可以先进行实际开发,然后通过对代码不断地进行小幅度的修改来改善其设计。这两种方式看似格格不入,但是它们都在本质上有一个相同的思想——设计很重要,只是两者达到良好设计的方法不同。从设计模式和重构第一天与开发人员见面开始,它们就注定是一对休戚相关的兄弟。现在,本书终于为人们架设了一道连接设计模式与重构的桥梁。
这段时间,我总在想这样一个问题:什么是设计模式?每一类编程语言都具有其自身的特性,就面向对象编程语言来说,其特性就是抽象、封装、继承和多态。同时,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计。而设计模式则是广大软件开发人员总结出的开发经验和技巧,它们利用编程语言的特性,实现这些设计准则。因此,在有经验的软件设计师眼里,没有设计模式,只有设计准则。现在,本书作者告诉我们:重构是实现设计模式的一种手段,设计模式往往也是重构的目的。从某种意义上来说,重构成全了设计模式,而设计模式度量了重构。需要注意的是,所谓“设计模式是重构的目的”,并不是说重构的结果一定是设计模式,有些情况下,重构恰恰是为了避免设计模式的过度使用。这是本书最值得关注的地方。
在准备写这篇译者序的时候,我总是觉得很为难,因为写译者序类似于写读后感,是要道出翻译过程中的特别感受,而我在翻译的过程中并没有什么特别突兀的触动。从本书的第一个重构直到最后一个,一切都显得那么自然;作者给出的每一个建议,每一个告诫,每一次小小的改动,给我的感觉都是水到渠成的。现在想想,其实重构的魅力就在于此,它就是每个软件开发人员自然而然应该做的事情。有句话叫“绚烂之极归于平淡”,用来形容重构,真是再合适不过了。
翻译从来就不是一件轻松的事,加之我完成本书翻译的日子都是在上海炎热的夏天中度过的。每当我汗流浃背地坐在电脑前,斟酌应该如何表达作者原意的时候,我都会从作者迸发的思维和精巧的话语中感受到一种平淡而又无穷的智慧。有趣的是,我接受本书翻译邀请的那天,Martin Fowler先生正好到上海做演讲,能在这位《重构》作者的演讲堂上接受到一本重构图书的翻译邀请,真是机缘巧合。
最后,我要谢谢我的父母。是他们给了我一个健康的身体,一个良好的生活环境,更重要的是全心全意的支持。没有他们就没有这一切。爸爸妈妈,我爱你们。
译 者
2006年8月25日
前言回到顶部↑
本书主旨
本书讲述的是重构(改善既有代码设计的过程)与模式(针对反复出现的问题的经典解决方案)的结合。本书建议,使用模式来改善既有的设计,要优于在新的设计早期使用模式。这对于已经存在几年和几分钟的代码都同样适用。我们通过一系列低层次的设计转换,也就是重构,来应用模式,改进设计。
本书目的
撰写本书是为了帮助读者:
·理解如何结合重构和模式;
·用模式导向的重构(pattern-directed refactoring)改善既有代码的设计;
·找出需要进行模式导向重构的代码段;
·了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。
为了实现这些目的,本书包含以下特色:
·一个含有27种重构方式的目录;
·示例以实战代码为基础,没有纯示意性的玩具代码;
·模式的描述,包括实际的模式示例;
·一组坏味 (也就是问题),表示需要进行模式导向的重构;
·实现同一模式的不同方式的示例;
·就什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。
为了帮助个人和小组学习本书中的27种重构,本书给出了学习顺序的建议。
读者对象
本书的读者是从事或者有兴趣改善既有代码设计的面向对象程序员。他们中很多人都在使用模式和重构,但是从来没有通过重构来实现模式。还有一些程序员对重构和模式知之甚少,但愿意了解更多相关内容。
本书对新项目开发(从头编写新的系统或者特性)和遗留开发(主要是维护遗留系统)都适用。
所需背景
本书讲述的是重构(改善既有代码设计的过程)与模式(针对反复出现的问题的经典解决方案)的结合。本书建议,使用模式来改善既有的设计,要优于在新的设计早期使用模式。这对于已经存在几年和几分钟的代码都同样适用。我们通过一系列低层次的设计转换,也就是重构,来应用模式,改进设计。
本书目的
撰写本书是为了帮助读者:
·理解如何结合重构和模式;
·用模式导向的重构(pattern-directed refactoring)改善既有代码的设计;
·找出需要进行模式导向重构的代码段;
·了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。
为了实现这些目的,本书包含以下特色:
·一个含有27种重构方式的目录;
·示例以实战代码为基础,没有纯示意性的玩具代码;
·模式的描述,包括实际的模式示例;
·一组坏味 (也就是问题),表示需要进行模式导向的重构;
·实现同一模式的不同方式的示例;
·就什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。
为了帮助个人和小组学习本书中的27种重构,本书给出了学习顺序的建议。
读者对象
本书的读者是从事或者有兴趣改善既有代码设计的面向对象程序员。他们中很多人都在使用模式和重构,但是从来没有通过重构来实现模式。还有一些程序员对重构和模式知之甚少,但愿意了解更多相关内容。
本书对新项目开发(从头编写新的系统或者特性)和遗留开发(主要是维护遗留系统)都适用。
所需背景
序言回到顶部↑
Ralph Johnson序一
《设计模式》一书中叙述了使用模式的几种方式。有些人在编写任何代码之前,都要很早地为模式做计划,而有些人在编写了大量代码之后才开始添加模式。第二种使用模式的方式就是重构,因为是要在不增加系统特性或者不改变其外部行为的情况下改变系统的设计。有些人在程序中加入模式,只是因为觉得模式能够使程序更容易修改;更多人这样做只是为了简化目前的设计。如果代码已经编写,这两种情形都是重构,因为前者是通过重构使修改更容易,而后者则是通过重构在修改后进行整理。
虽然模式是在程序中能够看到的东西,但是模式也是一种程序转换。每个模式都可以通过展示模式应用前后程序的变化来进行解释。这是可以将模式看作重构的另一种方式。
不幸的是,许多读者都忽视了设计模式和重构之间的联系。他们认为模式只是关乎设计,与代码无关。我想可能是设计模式这个书名误导了他们,可是《设计模式》一书中到处都是C++代码,这一点应该也说明了模式与设计和代码都密切相关,而且添加模式通常都需要改变代码。
Joshua Kerievsky恰恰发现了这种联系。我初次遇到他的时候,他刚刚开始组织纽约市的设计模式学习小组。他介绍了通过“前后变化”——用例子说明模式对某个系统的影响来学习模式的想法。在他富于感染力的热情号召下,他离开纽约市之前,小组已经发展到60多人,每月聚会数次。他开始通过客户现场培训、自己开班和因特网为各个公司教授模式课程。他甚至还教其他人如何教授模式。
Joshua继而还成为一位极限编程实践者和教师。因此,由他来写一本书介绍设计模式与极限编程的核心实践之一——重构之间的联系,可以说是再合适不过了。重构与设计模式绝不是没有关系的——相反,它们密切相关。虽然本书中谈到的模式并不是都来自我们的《设计模式》一书,但是都遵循书中的风格。本书说明了怎样让模式帮助我们设计,而又不必进行预先设计。
按本书中所教授的方法进行实践吧,这不仅能够提高你做出优秀设计的能力,也能够提高思考优秀设计的能力。
——Ralph Johnson,伊利诺伊大学厄巴尼—尚佩恩分校教授,《设计模式》四作者之一
Martin Fowler序二
几年来,我参与了敏捷方法尤其是极限编程的宣传和推广活动。在此过程中,人们经常会问到,这些方法与我长期对设计模式的兴趣是怎样和平共处的。事实上,我还曾经听人说,在我鼓励人们重构和演进式设计时,实际上是在放弃自己以前关于分析模式和设计模式的作品中所讲述的观点。
这种说法其实并不确切。看看模式社区的那些主要成员,再看看敏捷方法和极限编程社区的主要成员,有很多人活跃在两个社区。事实上,模式和演进式设计从非常早的时期起就有着密切的关系。
Joshua Kerievsky正处在两个社区交集的核心。我初次遇到他的时候,他已经在纽约市组织了一个成功的模式学习小组。小组成员互相合作,研究不断涌现的设计模式文献。我很快认识到Joshua对设计模式的领悟力可以说是首屈一指的,我从倾听他的谈话中获得了许多真知灼见。所以,他后来成为一名极限编程的先锋,对我来说是意料之中的。他在第一次极限编程会议上关于模式和极限编程的论文是我的最爱之一。
正因为如此,如果说有什么人最适合写模式与重构之间联系的话,那应该非Joshua莫属了。这个主题我在《重构》一书中曾经有所涉及,但是并没有深入探讨,因为我想把篇幅集中于基本的重构上。本书极大地扩展了这一主题,非常详细地讨论如何发展出《设计模式》一书[DP]中大多数流行的模式,说明了不需要预先将它们设计到系统中,而是应该随着系统发展而逐步演变出来。
除了通过学习获得的有关这些重构的具体知识以外,本书还讲述了有关模式与重构的一般性知识。许多人都说过,重构是学习模式的一种更佳方式,因为可以在重构的演进步骤中看到问题和解决方案之间的互动。这些重构还进一步证实了一个重要事实:重构其实就是循序渐进地进行较大的修改。
因此我非常高兴能够将本书介绍给大家。我花了很长时间说服Joshua写一本书,这些努力最终促成了本书的诞生。我对这一成果非常满意,不知读者以为然否?
——Martin Fowler
《设计模式》一书中叙述了使用模式的几种方式。有些人在编写任何代码之前,都要很早地为模式做计划,而有些人在编写了大量代码之后才开始添加模式。第二种使用模式的方式就是重构,因为是要在不增加系统特性或者不改变其外部行为的情况下改变系统的设计。有些人在程序中加入模式,只是因为觉得模式能够使程序更容易修改;更多人这样做只是为了简化目前的设计。如果代码已经编写,这两种情形都是重构,因为前者是通过重构使修改更容易,而后者则是通过重构在修改后进行整理。
虽然模式是在程序中能够看到的东西,但是模式也是一种程序转换。每个模式都可以通过展示模式应用前后程序的变化来进行解释。这是可以将模式看作重构的另一种方式。
不幸的是,许多读者都忽视了设计模式和重构之间的联系。他们认为模式只是关乎设计,与代码无关。我想可能是设计模式这个书名误导了他们,可是《设计模式》一书中到处都是C++代码,这一点应该也说明了模式与设计和代码都密切相关,而且添加模式通常都需要改变代码。
Joshua Kerievsky恰恰发现了这种联系。我初次遇到他的时候,他刚刚开始组织纽约市的设计模式学习小组。他介绍了通过“前后变化”——用例子说明模式对某个系统的影响来学习模式的想法。在他富于感染力的热情号召下,他离开纽约市之前,小组已经发展到60多人,每月聚会数次。他开始通过客户现场培训、自己开班和因特网为各个公司教授模式课程。他甚至还教其他人如何教授模式。
Joshua继而还成为一位极限编程实践者和教师。因此,由他来写一本书介绍设计模式与极限编程的核心实践之一——重构之间的联系,可以说是再合适不过了。重构与设计模式绝不是没有关系的——相反,它们密切相关。虽然本书中谈到的模式并不是都来自我们的《设计模式》一书,但是都遵循书中的风格。本书说明了怎样让模式帮助我们设计,而又不必进行预先设计。
按本书中所教授的方法进行实践吧,这不仅能够提高你做出优秀设计的能力,也能够提高思考优秀设计的能力。
——Ralph Johnson,伊利诺伊大学厄巴尼—尚佩恩分校教授,《设计模式》四作者之一
Martin Fowler序二
几年来,我参与了敏捷方法尤其是极限编程的宣传和推广活动。在此过程中,人们经常会问到,这些方法与我长期对设计模式的兴趣是怎样和平共处的。事实上,我还曾经听人说,在我鼓励人们重构和演进式设计时,实际上是在放弃自己以前关于分析模式和设计模式的作品中所讲述的观点。
这种说法其实并不确切。看看模式社区的那些主要成员,再看看敏捷方法和极限编程社区的主要成员,有很多人活跃在两个社区。事实上,模式和演进式设计从非常早的时期起就有着密切的关系。
Joshua Kerievsky正处在两个社区交集的核心。我初次遇到他的时候,他已经在纽约市组织了一个成功的模式学习小组。小组成员互相合作,研究不断涌现的设计模式文献。我很快认识到Joshua对设计模式的领悟力可以说是首屈一指的,我从倾听他的谈话中获得了许多真知灼见。所以,他后来成为一名极限编程的先锋,对我来说是意料之中的。他在第一次极限编程会议上关于模式和极限编程的论文是我的最爱之一。
正因为如此,如果说有什么人最适合写模式与重构之间联系的话,那应该非Joshua莫属了。这个主题我在《重构》一书中曾经有所涉及,但是并没有深入探讨,因为我想把篇幅集中于基本的重构上。本书极大地扩展了这一主题,非常详细地讨论如何发展出《设计模式》一书[DP]中大多数流行的模式,说明了不需要预先将它们设计到系统中,而是应该随着系统发展而逐步演变出来。
除了通过学习获得的有关这些重构的具体知识以外,本书还讲述了有关模式与重构的一般性知识。许多人都说过,重构是学习模式的一种更佳方式,因为可以在重构的演进步骤中看到问题和解决方案之间的互动。这些重构还进一步证实了一个重要事实:重构其实就是循序渐进地进行较大的修改。
因此我非常高兴能够将本书介绍给大家。我花了很长时间说服Joshua写一本书,这些努力最终促成了本书的诞生。我对这一成果非常满意,不知读者以为然否?
——Martin Fowler


点击看大图





加载中...
