重构
一、二、三
1、如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地那么做,那就先重构那个程序,使特性的添加比 较容易,然后再添加特性。
2、重构之前,首先检查自己是否有一套可靠的测试机制。这些测试机制必须有自我检验能力。
3、重构技术系以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。
4、任何一个傻瓜都可以写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。
5、重构(名词):对软件内部结构的一种调整,目的是在不改变【软件之可察行为】前提下,提高其可礼节性,降低其修改成本。
6、重构(动词):使用一系列重构准则(手法),在不改变【软件之可察行为】前提下,调整其结构。
7、事不过三,三则重构。
8、添加功能时一并重构,修补错误时一并重构,复审代码时一并重构。
9、不要过早发布(publish)接口。请修改你的代码拥有权政策,使重构更顺畅。
10、When :
a、Duplicated Code 重复的代码 b、Long Method 过长函数 c、Large Class 过大类
d、Long Parameter List 过长参数列 e、Dilvergent Change 发散式变化 f、Shotgun Surgery 霰弹式修改
g、Feature Envy 依恋情结 h、Data Clumps 数据泥团 i、Primitive Obsession 基本型别偏执
j、Switch Statements Switch 惊秫现身 k、Parallel Inheritance Hierarchies 平衡继承体系
l、Lazy Class 冗赘类 m、Speculative Generality 夸夸其谈未来性 n、Temporary Field 令人迷惑的暂时值域
o、Message Chains 过度耦合的消息链 p、Middle Man 中间转手人 q、Inappropriate Intimacy 狎昵关系
r、Alternative Classes with Different Interfaces 异曲同工的类 s、Incomplete Library Class 不完美的程序库类
t、 Data Class 纯稚的数据类 u、Refused Bequest 被拒绝的遗赠 v、Comments 过多的注释
11、当你感觉需要撰写注释,请先尝试重构,试着让所有注释都变得多余。
四 、构筑测试体系
1、确保所有测试都完全自动化,让它们检查自己的测试结果。
2、一整组测试就是一个强大的【臭虫】侦测器,能够大大缩减查找【臭虫】所需要的时间。
3、频繁地运行测试。每次编译请把测试也考虑进去-每天至少执行每个测试一次。
4、每当你接获臭虫提报,请先撰写一个单元测试来揭发这只臭虫。
5、编写未臻完善的测试并实际运行,好过对完美测试的无尽等待。
6、考虑可能出错的边界条件,把测试活力集中在那儿。
7、当事情被大家认为应该会出错时,别忘了检查彼时是否有异常如预期般的被抛出。
8、不要因为【测试无法捕捉所有臭虫】,就不撰写测试代码,因为测试的确可以捕捉到大多数臭虫。
1、如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地那么做,那就先重构那个程序,使特性的添加比 较容易,然后再添加特性。
2、重构之前,首先检查自己是否有一套可靠的测试机制。这些测试机制必须有自我检验能力。
3、重构技术系以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。
4、任何一个傻瓜都可以写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。
5、重构(名词):对软件内部结构的一种调整,目的是在不改变【软件之可察行为】前提下,提高其可礼节性,降低其修改成本。
6、重构(动词):使用一系列重构准则(手法),在不改变【软件之可察行为】前提下,调整其结构。
7、事不过三,三则重构。
8、添加功能时一并重构,修补错误时一并重构,复审代码时一并重构。
9、不要过早发布(publish)接口。请修改你的代码拥有权政策,使重构更顺畅。
10、When :
a、Duplicated Code 重复的代码 b、Long Method 过长函数 c、Large Class 过大类
d、Long Parameter List 过长参数列 e、Dilvergent Change 发散式变化 f、Shotgun Surgery 霰弹式修改
g、Feature Envy 依恋情结 h、Data Clumps 数据泥团 i、Primitive Obsession 基本型别偏执
j、Switch Statements Switch 惊秫现身 k、Parallel Inheritance Hierarchies 平衡继承体系
l、Lazy Class 冗赘类 m、Speculative Generality 夸夸其谈未来性 n、Temporary Field 令人迷惑的暂时值域
o、Message Chains 过度耦合的消息链 p、Middle Man 中间转手人 q、Inappropriate Intimacy 狎昵关系
r、Alternative Classes with Different Interfaces 异曲同工的类 s、Incomplete Library Class 不完美的程序库类
t、 Data Class 纯稚的数据类 u、Refused Bequest 被拒绝的遗赠 v、Comments 过多的注释
11、当你感觉需要撰写注释,请先尝试重构,试着让所有注释都变得多余。
四 、构筑测试体系
1、确保所有测试都完全自动化,让它们检查自己的测试结果。
2、一整组测试就是一个强大的【臭虫】侦测器,能够大大缩减查找【臭虫】所需要的时间。
3、频繁地运行测试。每次编译请把测试也考虑进去-每天至少执行每个测试一次。
4、每当你接获臭虫提报,请先撰写一个单元测试来揭发这只臭虫。
5、编写未臻完善的测试并实际运行,好过对完美测试的无尽等待。
6、考虑可能出错的边界条件,把测试活力集中在那儿。
7、当事情被大家认为应该会出错时,别忘了检查彼时是否有异常如预期般的被抛出。
8、不要因为【测试无法捕捉所有臭虫】,就不撰写测试代码,因为测试的确可以捕捉到大多数臭虫。
浙公网安备 33010602011771号