重构-----改善既有代码的设计

1重构原则

1.1 定义:

1).调整软件内部结构,目的是在不改变软件软件可查行为前提下,提高其可理解性,降低其修改成本。

2).使用一系列重构准则,在不改变软件可查行为前提下,调整其结构

1.2 何时重构

1).三次法则

2).添加功能时

3).修补错误时

4).复审代码时

1.3 何时不该重构

1).代码太乱,重构效率低于重写效率时

2).项目接近期限时停止重构

2.代码的坏味道

2.1 Duplicated Code

2.2 Long Method

2.3 Large Class

2.4 Long Parameter List

2.5 Divergent Change

既因为某些原因,需要不断的重复修改已有函数

2.6 Shotgun Surgery

既因一种变化,需要很多小的修改,且难以找到,将他们整合到一个类中

2.7 Feature Envy

既函数需要调用其它类中的取值函数多于本类中的函数时,将该函数移至该去的地方。

2.8 Data Clumps

既多个地方看到相同的三四笔数据项,在两个类内的值域相同,将这些数据提取到新的对象中

2.9 Primitive Obsession

2.10 Switch Statements

既少用switch和case语句,用多态去替代

2.11 Parallel Inheritance Hierarchies

既每当为一个类增加一个子类时,必须也为另一个类增加相应的子类,让一个继承体系的实体(参考,引用,refer to)另一个体系的实体。

2.12 Lazy Class

既对于没有体现其价值的类来说,可用innerClass替代

2.13 Speculative Generality

2.14 Temporary Field

如果class中有一个复杂算法,需要好几个变量,应该把与算法有关的提取到独立的class中。

2.15 Message Chains

既对象之间互相依赖索求

2.16 Middle Man

2.17 Inappropriate Intimacy

既如果两个classes过于亲密,花费太多时间去探究彼此的private成份,请拆分他们,降低耦合度。

2.18 Alternative Classes with Different Interfaces

既两个函数做同一件事,却有着不同的签名,重命名并协调他们到一致为止。

2.19 Incomplete Library Class

2.20 Data Class

1)移除该移除的set方法

2)将get和set方法尽量搬到该类来

2.21 Refused Bequest

既subclass复用了superclass的行为实现,却又不愿意支持superclass的接口

2.22 Comments

既过多的注释

3.构筑测试体系

4.重构名录

4.1 重构的记录格式

Name

Summer

Motivation

Mechanics

Example

4.2 寻找引用点

5.重新组织你的函数

5.1 Extract Method

大函数小化,精准函数名称和函数本体之间的语义距离。

5.2 Inline Method

在函数调用点插入函数本体,然后移除该函数

5.3 Inline Temp

5.4 Replace Temp with Query

提炼表达式为新函数,将所有引用点替换为对新的函数的调用,

5.5 Intruduce Explaining Variable

将复杂函数表达式放到临时变量中,以此表达式名称来解释表达式的用途。

5.6 Split Temporay Variable

针对每次赋值,创造一个独立的、对应的临时变量。

5.7 Remove Assignments to Parameters

以一个临时变量,取代参数的位置。

5.8 Replace Method with Method Object

将大型函数放入一个单独的对象,如此一来局部变量就成了对象的值域。然后你可以在同一个对象中将这个大型函数分解为数个小型函数。

5.9 Substitute Algorithm

将函数本体替换为另一个算法

6.在对象之间搬移特性

6.1 Move Method

你的程序中,有个函数与其所驻class之外的另一个class进行更多交流:调用后者或被后者调用。

6.2 Move Field

6.3 Extract Class

6.4 Inline Class

6.5 Hide Delegate

在server端(某个class)建立客户所需的所有函数,用以隐藏委托关系。

6.6 Remove Middle Man

6.7 Introduce Foreign Method

6.8 Introduce Local Extension

7.重新组织数据

7.1 Self Encapsulate Field

7.2 Replace Data Value with Object

7.3 Change Value to Referrence

7.4 Change Referrence to Value

7.5 Replace Array with Object

7.6 Duplicate Observed Data

7.7 Change Unidirectional Association to Bidirectional

7.8 Change Bidirectional to Unidirectional Association

7.9 Replace Magic Number with Symbolic Constant

7.10 Encapsulate Field

7.11 Encapsulate Collection

7.12 Replace Record with Data Class

7.13 Replace Type Code with Class

7.14 Replace Type Code with Subclasses

7.15 Replace Type Code with State/Stratgy

7.16 Replace Subclass with Field

8.简化条件表达式

8.1 Docompose Conditional

从if、then 、else 三个段落中分别提取独立的表达式

8.2 Consolidate Conditional Expression

8.3 Consolidate Duplicate Conditional Fragments

8.4 Remove ControlFlag

8.5 Replace Nested Conditional with Guard

8.6 Introduce Null Object

将null value 替换为 null object

8.7 Introduce Assertion

9.简化函数调用

9.1 Rename Method

9.2 Add Parameter

9.3 Remove Paremeter

9.4 Separate Query from Modifier

9.5 Param enterize Method

9.6 Replace Parameter with Explicit Methods

9.7 Preserve Whole Object

9.8 Replace Parameter with Methods

9.9 Introduce Parameter Object

9.10 Remove Setting Methods

9.11 Hide Method

9.12 Replace Constructor with Factory Method

9.13 Encapsulate Downcast

9.14 Repalce Error Code with Exception

9.15 Replace Exception with Test

10.处理概括关系

10.1 Pull Up Field

10.2 Pull Up Method

10.3 Pull Up Constractor Body

10.4 Push Down Method

10.5 Push Down Field

10.6 Extract Subclass

10.7 Extract SuperClass

10.8 Extract Interface

10.9 Collapse Hierarchy

10.10 From Template Method

10.11 Replace Inheritance with Delegation

10.12 Replace Delegation with Inheritance

11.大型重构

12.重构,复用与实现

14.重构工具

15.集成

上午1:29:57

时间: 2024-10-24 03:47:57

重构-----改善既有代码的设计的相关文章

《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能

此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有的经历说起吧. 刚开始学编程时,比如,要统计数字出现的次数,我们会这么定义变量 int i=0;//统计次数 老师看了说,代码要有可读性,见名知意; 于是,我们把它改成 int count=0; 后来才知道,原来这么一手这就是重构的第一式,重命名 (eclipse快捷键 alt+shift+R,最近

《重构——改善既有代码的设计》读书笔记

重构--改善既有代码的设计 1 重构概述 1.1 重构的概念(What) Refactoring 名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本. 动词:使用一系列重构方法,在不改变软件可观察行为的前提下,调整其结构. 1.2 为什么要重构(Why) 改进软件设计 提高代码质量和可读性,使软件系统更易理解和维护 帮助尽早的发现缺陷 提高编程速度 1.3 何时重构(When) 何时重构: 1)随时随地进行. 2)三次法则:第一次做某件事只管去做:

【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文

重构改善既有代码的设计思维导图

最近闲来无事就把之前看的书,做了一张张的思维导图,来分享给大家 重构改善既有代码的设计思维导图: --------------- 不知道是博客园的问题,还是我的浏览器的问题,图片没法上传,如有人想要想看 可以给我发邮件: [email protected]  只为共同学习.也可以留言!!!

好书推荐之:重构-改善既有代码的设计

下载地址 高清 1.3M 重构-改善既有代码的设计 版权声明:本文为博主原创文章,未经博主允许不得转载.

《重构&mdash;&mdash;改善既有代码的设计》【PDF】下载

<重构--改善既有代码的设计>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196358 编辑推荐 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码.多年前,正是<重构:改善既有代码的设计>原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分.<重构:改善既有代码的设计>也因此成为与<设计模式>齐名的经典著作,被译为中.德.俄.日等众多语言,

实践提高《重构改善既有代码的设计第2版》PDF中文+PDF英文+对比分析

重构是编程的基础,是在不改变外部行为的前提下,有条不紊地改善代码.编程爱好者都知道,Martin Fowler 的<重构:改善既有代码的设计>已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计.提升软件的可维护性,又可用于使既有代码更易理解.焕发出新的活力. <重构改善既有代码的设计(第2版)>在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化.第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例.此外,第2 版中还新增了与函数

【重构.改善既有代码的设计】14、总结&amp;读后感

14.总结 首先,这是一本太老的书,很多观点已经被固化或者过时了.但核心观点没有问题,虽然大多数观点已经被认为是理所当然的事情了. 重构的定义 重构分几种: 1.狭义的代码重构   就是本书讲的,在不改变软件可观察行为的前提下,改变其内部结构.这就是完全不改变程序的功能,只是改变代码的组织方式,也就是只是整理代码而已,目的是优化代码架构,而不是优化行为.算法.逻辑或流程. 2.普通意义的重构 事实上,我们一般很少会去做纯粹的重构,所以,了解了软件行为,从行为.算法.逻辑或流程上进行优化,,往往会

《重构-改善既有代码的设计》读书笔记

重构,第一个案例 1.1 起点 如果发现现有的代码结构使你无法很方便地添加新特性,那就先重构,使特性的添加比较容易进行后,再添加特性; 1.2 重构的第一步 为即将修改的代码建立可靠的测试环境 – 是人就会犯错,所以需要可靠的测试; 测试结果能够自我检验 – 成功"OK",失败列出失败清单并打印行号 (自动化对比测试结果是提高效率的前提); 1.3 分解并重组"巨型"函数 切分提炼长函数(Extract Method),并移至更合适的类(Move Method) –

《重构—改善既有代码的设计》笔记

为什么要重构 改进软件设计,消除重复代码 保持代码易读.易修改 提高编程速度(良好设计师维持软件开发速度的根本) 发现BUG 什么时候重构 事不过三,三则重构(三次法则) 添加功能时一并重构 修改错误时一并重构 复审代码时一并重构 问题代码 重复的代码 过长函数 过大类 过长参数列表 发散式变化 霰弹式修改 依恋情节 数据泥团 基本型别偏执 switch惊悚现身 冗赘类 夸夸其谈未来性 令人迷惑的暂时值域 过度耦合的消息链 中间转手人 狎昵关系 异曲同工的类 不完美的程序库类 纯稚的数据类 被拒