重构——改善既有代码的设计.pdf

重构——改善既有代码的设计.pdf

ID:23540995

大小:5.76 MB

页数:155页

时间:2018-11-08

重构——改善既有代码的设计.pdf_第1页
重构——改善既有代码的设计.pdf_第2页
重构——改善既有代码的设计.pdf_第3页
重构——改善既有代码的设计.pdf_第4页
重构——改善既有代码的设计.pdf_第5页
资源描述:

《重构——改善既有代码的设计.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、重构——改善既有代码的设计张长青adamzhang@126.com2015-09-06目录•一、什么是重构•二、重构的原则•三、代码的坏味道•四、重构方法列表•五、重构、复用与现实•六、重构工具及应用一、什么是重构重构来源于实践重构来自于Smalltalk圈子•由于重构是框架开发中不可缺少的一部分,当框架开发人员讨论自己的工作时,这个术语就诞生了。当他们精炼自己的类继承体系时,当他们叫喊着自己可以拿掉多少多少行代码时,重构的概念慢慢浮出水面。重构是保持代码易读、易修改的关键•框架设计者知道,这东西不可能一开始就

2、完全正确,它将随着设计者的经验成长而进化。他们也知道,代码被阅读和被修改的次数远远多于它被编写的次数。重构的定义重构(名词形式的定义)•对软件内部结构的一种调整,目的是在不改变软件可察行为的前提下,提高其可理解性,降低其修改成本。重构(动词形式的定义)•使用一些列重构手法,在不改变软件可观察行为的前提下,调整其结构。软件开发的“两顶帽子”添加新功能•添加新功能时,不应该修改既有代码,只管添加新功能并通过测试。添加新功能重构代码重构代码•重构时不再添加新功能,只管改进程序结构,并通过已有测试。软件的美感结构之美•

3、软件工程希望建立完美的需求和设计,按照既有规范编写标准划一的代码。解构之美•快速迭代和RAD,在混沌的循环往复中实现需求。重构之美•以XP的那种敏捷而又严谨的方式演绎了重构之美。二、重构的原则为何重构?重构改进软件设计(Design)重构使软件更容易理解(Maintain)重构帮助找到BUG(Debug)重构提高编程速度(Efficiency)何时重构?三次法则:事不过三,三则重构添加功能时重构(NewFeature)修补错误时重构(BugFix)复审代码时重构(CodeReview)何时不该重构?既有代码太混

4、乱,且不能正常工作,需要重写而不是重构。项目接近最后期限时,应该避免重构。为什么重构有用?程序的两面价值•1、“今天可以为你做什么”;(添加功能和修复错误)•2、“明天可以为你做什么”;(是否容易修改和扩展)重构是一条摆脱困境的道路•如果纯粹为今天工作,明天将完全无法工作。•如果发现昨天的决定已经不适合今天的情况,放心改变这个决定就行。重构的目标为什么程序如此难以相与?设计与重构的目标难以阅读的程序,难以修改容易阅读逻辑重复的程序,难以修改所有逻辑都只在唯一地点指定添加新行为时需要修改已有代码新的改动不会

5、危及现有行为的程序,难以修改带复杂条件逻辑的程序,难以修尽可能简单表达条件逻辑改重构可以不断增加程序的价值重构是这样一个过程:它在一个目前可运行的程序上进行,在不改变程序行为的前提下使其具备一些美好性质(易阅读、易修改、易扩展等),使我们能够继续保持高速开发,从而不断增加程序的价值,延长程序的生命周期。间接层和重构间接层的价值•允许逻辑共享•分开解释意图和实现•隔离变化•封装条件逻辑大多数重构都为程序引入了更多的间接层•“计算机科学是这样一门科学:它相信所有问题都可以通过增加一个间接层来解决。”——Denni

6、sDebruler如何对经理说?经理的特质对策如果经理懂技术向TA介绍重构应该不难如果经理只对质量感兴趣在代码复审时引入重构如果经理只对进度感兴趣最好不要告诉经理O(∩_∩)O~软件开发者都是专业人士,他们核心的工作价值就是快速创造出高效软件。至于怎么做,理应自主决定。如果重构能够帮助他们更好地完成工作,何乐而不为呢?三、代码的坏味道“如果尿布臭了,就换掉它。”——语出BECK奶奶,讨论抚养小孩的哲学代码的坏味道重构的时机很重要•决定何时重构、何时停止和知道重构机制如何运转一样重要。用“味道”来形容重构时

7、机•从大量的代码中找寻某些特定结构,这些结构指出了重构的可能性。•没有任何的度量比得上一个见识广博者的直觉,所以必须培养自己的判断力,学会判断一个类内有多少实例变量算是太大、一个函数内有多少代码才算太长。代码的坏味道1、DuplicatedCode(重复代码)•如果在一个以上的地方看到相同的程序结构,设法将它们合而为一,程序会变得更好。2、LongMethod(过长函数)•小函数支持所有“间接层”所带来的利益,如解释能力、共享能力、选择能力。代码的坏味道3、LargeClass(过大的类)•如果利用单个类做太多

8、事情,往往会出现太多实例变量,从而导致出现重复代码。•如果该类是GUI类,可能需要把数据和行为移到独立的领域对象中。4、LongParameterList(过长参数列)•太长的参数列不仅难以理解,还会造成前后不一致、不易使用。•一旦需要更多数据,就不得不修改它。如果将对象传递给函数,大多修改都可以省略。代码的坏味道5、DivergentChange(发散式变化)•某个类经常因为不同的原

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。