概述
代码的坏味道
神秘命名
直观明了,能够清晰地表明自己的功能和用法
- 改变函数声明
- 变量改名
- 字段改名
重复代码
两个函数含有相同的表达式:
-
提炼函数
-
移动语句重组代码顺序,再提炼
一个超类的不同子类中:
- 函数上移、避免互相调用
过长函数
什么时候分解函数?
- 一段代码需要以注释来说明
- 函数做什么、如何做 (函数名解释用途)
如何分解?
- 大段代码:提炼函数
- 太多的临时变量:以查询取代临时变量
- 参数列表过长: 引入参数对象、保持对象完整 、以命令取代函数
- 条件表达式: 分解条件表达式
- 庞大的switch: 每个分支提炼函数、多态取代条件表达式
- 循环:提炼函数、(难以命名)再拆分循环
过长参数列表
- 以查询取代参数
- 保持对象完整
- 引入参数对象
- 移除标记参数
- 函数组合成类
全局数据
- 封装变量
可变数据
-
封装变量 – 数据更新操作在几个函数内执行
-
拆分变量 – 拆分为不用用途的变量
-
查询函数、修改函数分离 – 不调用有副作用的代码
-
移除设值函数 – 缩小变量作用域
-
以查询取代派生变量 – 在其他地方计算可变数据
-
函数组合成类、函数组合变换 – 限制需要对变量进行修改的代码量
-
引用对象改为值对象 – 一个变量内部包含数据,直接替换整个数据结构
发散式变化
- 拆分阶段 – 发生变化的两个方向有先后次序
- 搬移函数 – 将处理逻辑分开
- 提炼函数、提炼类
霰弹式修改
- 搬移函数、搬移字段 – 需要修改的代码放入同一个模块
- 函数组合成类 – 多函数操作相似的数据
- 函数组合成变换 – 函数的功能是转化or充实数据结构
- 拆分阶段 – 一些函数输出可以组合供给一段使用这些计算结果的逻辑
- 内联函数、内联类 – 将分散的逻辑聚合
依恋情结
- 搬移函数 – 函数和数据交互过多
- 提炼函数、搬移函数 – 函数中的一部分代码依恋过多
数据泥潭
- 提炼类 – 将数据项整合
- 引入参数对象保持对象完整 – 为提炼的类瘦身
基本类型偏执
- 以对象取代基本类型 – 将单独存在的数据值替换为对象
- 以子类取代类型码、以多态取代条件表达式 – 替换的数据值是控制条件行为的类型码
重复的switch
- 以多态取代条件表达式
循环语句
- 以管道取代循环(filter,map)
冗赘的元素
- 内联函数、内联类
- 折叠继承体系 – 类元素处于一个继承体系中
夸夸其谈通用性
- 折叠继承体系 – 某个抽象类没有作用
- 内联函数、内联类 – 不必要的委托
- 改变函数声明 – 函数的某些参数未用or一些不必要的参数
- 移除死代码
临时字段
- 提炼类、搬移函数
- 引入特例 – 变量不合法的情况下创建一个代替对象
过长的消息链
- 隐藏委托关系
- 提炼函数、搬移函数
中间人
- 移除中间人 – 过度运用委托封装
- 内联函数 – 将函数放入调用端
内幕交易
-
搬移函数、搬移字段 – 减少私下交流
-
隐藏委托关系 – 将模块变成两者中介
-
以委托取代子类、以委托取代超类 – 离开继承关系
过大的类
- 提炼类 – 将几个关联的变量提炼到一个新的类中
- 提炼超类、以子类取代类型码 – 简单
异曲同工的类
未来可以替换
纯数据类
- 封装记录 – 一些public字段
- 移除设置函数 – 一些不被其他类修改的字段
- 搬移函数、提炼函数 – 将一些调用行为搬移到数据类中
被拒绝的遗赠
- 函数下移、字段下移 – 超类只持有子类共享的东西
- 以委托取代子类、以委托取代超类 – 舍弃继承体系
注释
需要撰写注释时,请先尝试重构,试着让所有的注释都变得多余。
- 提炼函数、改变函数声明、引入断言
最后
以上就是慈祥羽毛为你收集整理的重构,改善既有代码的设计 -- 阅读笔记的全部内容,希望文章能够帮你解决重构,改善既有代码的设计 -- 阅读笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复