重构--我常常看到的代码的坏味道

重构:改善既有代码的设计(第二版)–代码的坏味道

重构的前两章讲了个重构卖票逻辑的小例子,第二章讲了重构的一些介绍和必要性,以及重构在软件开发过程中的位置.

第三章是关于什么样的代码需要重构,内容比较多也比较散,先行记录下这部分的内容,后续章节也和这部分有很多关联性,先打个结.
这部分内容经常让我发现我自己的代码也会写成这个样子,堆一大堆代码上去,难以阅读,难以修改,难以处理.

第三章不少东西我都挺有共鸣的,也写写我自己的想法.

第三章:代码的坏味道

1. 神秘命名(Mysterious Name)

编程中最难的两件事:命名和缓存失效.
起一个看起来和另一个变量或者函数类似的名字,一眼下去看不清楚你这个变量到底是为了什么,往往意味着他的含义和功能是不明确的.看起来是命名困难,实际上隐含了函数/类/变量的功能定义不充分.
所以当命名发生了困难的时候,导致你起的名字不能让人(起码是你自己)一目了然的时候,先别凑活着起一个名字算了,而是想想,是不是需要这个东西,导致你起名困难的原因是什么.(章北海他爹:要多想,我只能告诉你要多想)

2. 重复代码(Duplicated Code)

永远别复制粘贴代码,一是你不能为粘贴过来的代码负责,另一方面,修改时需要往往要修改多处,或者需要权衡是否进行修改,这种成本是远远高于复制来的那一下的省事的.

3. 过长函数(Long Function)

函数越长,他的功能就越不纯粹,就越复杂,就越容易出错.很容易理解的事情是越短的函数出错的可能性越低,因为它足够简单.简单就是稳健.
最好能够把函数的功能尽可能抽象到函数当中,写出一个长的函数时,就要想着怎么对他进行一个抽象能更好的让人读懂它.
自解释的代码往往就是比较安全的写法.
需要说明的是,自解释不代表着不需要代码,这两个事情没啥关系.

4. 过长参数列表(Long parameter List)

参数列表长,意为着什么呢?
意味着传入的参数是没有经过组织的,可以考虑用对象替代过长的参数.

5. 全局数据(Global Data)

非常之不安全的东西,随时可能被引爆的定时炸弹.慎用.

6. 可变数据(Mutable Data)

变量的应用传递会导致在非显式的地方变量被修改,这可能会出乎原有的调用意图.
(函数式编程我并不了解)

7. 发散式变化(Divergent Change) 8. 霰弹式修改(Shotgun Surgery)

修改一个模块时,需要配套修改很多处代码.最好能收敛这样的变化逻辑,或者通过流程来固定变化时对其他代码的影响.

9. 依恋情结(Feature Envy)

10. 数据泥团(Data Clumps)

互相依存的数据或结队出现的数据应该被定义为类.不然就必须像是捧着一堆玻璃球一样一个个的处理,但是他们本该是在一起的,能用一个小筐子把它们都装起来.

11.基本类型偏执(Primitive Obsession)

常用自定义类型应当定义出自己的类.
比如我以前经常用的经纬度,多边形,我常常用字符串的方式存储他,用浮点数的方式处理它,但是他值得一个自己的类,还能配有相应的方法.

12.重复的switch(Repeated Switches)

switch–>多态?
python的多态我是用的非常不习惯,他有一种不是严格的多态的感觉,很随便.

13.循环语句(Loop)

管道操作代替循环
filter,map

14. 冗赘的元素(Lazy Element)

额外的类,不需要的复杂设计等等,通过折叠继承体系处理(超类和子类之间无太大区别,将它们合为一体.)

15. 夸夸其谈通用性(Spechlative Generality)

如果函数的唯一用户是测试用例(更可怕的是没有用户的),就该被删除掉
另一个情况是功能被迁移了,原有的函数或者类被废弃了,它变成了代码中的尸体,散发出腐烂的味道,但是处于某种原因(懒,危险)的原因,他被留在了原地,日复一日他就成为屎山的一部分,更加的难以被处理.
有种方法是你意识到了这个方法被遗弃了,你应该让任何使用这个方法的地方抛出异常,如果系统能够正常的运行,你就能放心大胆的删除这部分代码了.

16. 临时字段(Temporary Field) 17. 过长的消息链(Message Chains) 18. 中间人(Middle Man) 19. 内幕交易(Lnsider Trading) 20. 过大的类(Large Class) 21. 异曲同工的类(Alternative Classes with Different Interfaces) 22. 纯数据类(Data Class)

23 被拒绝的遗赠(Refused Bequest)

子类并不需要从父类继承来的东西,或者只需要一部分.

24.注释

注释不是写出垃圾代码的理由,不能因为写好了注释就能理直气壮的放一堆垃圾代码.注释可以作为文档,或者注释可以用来说明注意事项.

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值