《重构》读书笔记
作者:互联网
代码的坏味道
- 当你感觉需要攥写注释的时候,请先尝试重构,试着让注释变得多余。
- 重复代码(Duplicated Code)
同一个类的两个函数有相同的表达式 两个互为兄弟的子类内含相同的表达式 ==> 提解到超类中去 两个毫不相关的类出现重复代码 ==> 放到第三个类,用一个静态方法,或者放入其中一个类,另一个类调用它即可,看具体详情
- 过长的函数(Long Method)
每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)来命名。 如果函数内有大量的参数和临时变量,他们会对你的函数提炼形成阻碍。传递临时变量给新函数,导致可读性是非常的差的。此时你可以 把临时变量放到子函数中去,最终需要的变量,return回来即可 条件表达式和循环也是提炼的信号。 都可以提炼到一个独立函数中,并且以良好的命名来说明用途
- 过大的类 (Large Class)
如果单个类做的事情太多,类内有太多的代码,也是代码重复,混乱并最终走向死亡的源头。 按照职责拆分类。比如,先确定客户端如何使用他们,然后清除了解这个类,在进行分解
- 过长的参数列 (Long Parameter List)
太长的参数会造成前后不一致,不易使用,而且难以理解 此时,你需要把过长的参数封装到一个对象中去,这样就十分的方便了 此对象一般叫做VO,或者xxxxRequest 看个人
重新组织函数
- 提炼函数 (Extract Method)
如果一个函数非常的长,那么把其中逻辑一样的部分提炼出来。比如 一个简单的循环打印并且计算sum的函数 printTest(); int res = getRes(); 但对于有临时变量的,这个是特别的注意。传参,还有返回值,这十分的谨慎琢磨。
- 引用解释性变量 (Introduce Explaining Variable)
你可以用这项重构将每个条件子句提炼出来,以一个良好的命名的临时变量来解释对应条件子句的意义 总感觉可用可不用
- 移除对参数的赋值 (Remove Assignments to Parameters)
代码对一个参数(传进一个函数的参数)赋值,是非常不友好的做法。 所以请以一个临时变量取代该参数的位置
- 以函数对象取代函数 (Replace Method with Method Object)
如果一个函数之中局部变量泛滥成灾,那么想分解这个函数是非常困难的,有时你会发现根本无法拆解一个需要拆解的函数。这种情况,你就需要函数对象这件法宝了。 将这个函数变为对象,函数的局部变量变为函数对象的字段。在新类里面建立一个 compute 的函数,然后使用分解函数进行重构即可
重新组织数据
- 以对象取代数据值 (Replace Data Value with Object)
比如:一开始你可能会用一个字符串来表示 “电话号码” 的概念,但是随后你就会发现,电话号码需要 “格式化”, “抽取区号” 之类的特殊行为。 对这个 “电话号码” 你有很多的操作,这是非常不友好的。 所以必要时,将 String phone ==> Phone phone 一个对象
标签:重构,函数,读书笔记,一个,提炼,参数,Method,变量 来源: https://www.cnblogs.com/wenbochang/p/14491042.html