关于代码重构的感触
代码重构
如何重构代码,我相信大多数开发人员都经历过,大多数老项目或者从其他人手里接手的项目,刚开始大多都有抵触情绪,能挑出以前代码的一大堆问题,多数人脑子里都有有这种想法,如果条件允许,很想自去重写现在的代码。而重写这个过程,其实就是重构。
重构不是一个一个一蹴而就的事,需要长期的实践和经验才能够完成得很好,每一次重构或者读别人代码,其实就是不断学习的过程,经历不断踩坑,不断填坑的过程后这就是成长。重要是我们的面对问题时的态度和心态。
提到重构,给大家推荐一本书《重构:改善既有代码的设计》。
以下部分摘自《重构:改善既有代码的设计》。
1.什么是重构
重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高可读性、可扩展性和复用性性而对软件进行的改造,对代码内部的结构进行优化。
2.为何重构
1)改进软件设计(整理代码)
2)提高代码质量和可读性,使软件系统更易理解和维护
3)帮助尽早的发现错误(Defects)
4)提高编程速度
3.何时重构
1)重构应该是随时随地进行。不应该为重构而重构。
2)三次法则:第一次做某件事只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做 第三次 再做类似的事情,就应该重构了。
3) 新增功能的时候重构
4)代码审查的时候重构。
5)修复bug或者升级的时候就想重构
4.什么时候不应该重构
1)有些代码无法运行或者无法月度,重构的成本比重写都高
2)经过评估无法在交付周期内完成,应避免重构风险,
5.坏代码长什么样?
1)命名不规范
2)重复代码
3)过大的类
4)过长参数列表
5)发散式变化
6)霰弹式修改
7)依恋情结
8)数据泥团
9)基本类型偏执
10)switch惊悚现身
11)基本类型偏执
12)过长的消息链
13)异曲同工的类
14)纯数据类
15)被拒绝的遗赠
16)过多的注释
6、重构的一些方法
1)结构化代码
提炼函数
内联函数
内联临时变量
以查询取代临时变量
引入解释性变量
分解临时变量
移除对参数的赋值
以函数对象取代函数
替换算法
2)在对象之间搬移特性
搬移函数
搬移字段
提炼类将类内联化
隐藏“委托关系
移除中间人
引入外加函数
引入本地扩展
3)重新组织数据
自封装字段
以对象取代数据值
将值对象改为引用对象
将引用对象改为值对象
以对象取代数据
复制“被监视数据
将单向关联改为双向关联
将双向关联改为单向关联
以字面常量取代魔法数
封装字段
封装集合
以数据类取代记录
以类取代类型码
以子类取代类型码
以State/Strategy取代类型码
以字段取代子类
4)简化条件表达式
分解条件表达式
合并条件表达式
合并重复的条件片段
移除控制标记
以多态取代条件表达式
引入Null对象
引入断言
5)简化函数调用
函数改名
添加参数
移除参数
将查询函数和修改函数分离
令函数携带参数
以明确函数取代参数
保持对象完整
以函数取代参数
引入参数对象
移除设值函数
隐藏函数
以工厂函数取代构造函数
封装向下转型
以异常取代错误码
以测试取代异常
6)处理概括关系
字段上移
函数上移
构造函数本体上移
函数下移
字段下移
提炼子类
提炼超类
提炼接口
折叠继承体系
塑造模板函数
以委托取代继承
以继承取代委托
7)大型重构
梳理并分解继承体系
将过程化设计转化为对象设计
将领域和表述/显示分离
提炼继承体系
感触
1.能用框架来规范开发人员的行为.让他们按统一规范、统一方向进行编码实现。
2.了解各种设计模式使用的场景。
3.要善于发现问题,要有好奇心。
评论