重构:改善代码结构
数媒开发部技术沙龙
张云贵
设计 vs 编码
设计无所谓,做出来就行
理由:时间紧、没必要、太麻烦
投入多人维护,程序员太辛苦
先有良好的设计,而后才编码
传统开发理论,良好的设计是编码的前提
设计费力、赶不上变化、逐渐腐败变质
重构—整理代码
精简的设计Æ编码实现Æ设计改进
什么是重构
重构≠伤筋动骨,重构≠推倒重来
整理代码,在代码写好后改进它的设计
设计不再是一 切动作的前提,而是在整
个开发中持续强化和保持良好的设计
为什么重构
改善软件设计—不要以烂为烂
使编码更易理解—代码是给人看的
更易添加功能、有趣—你愿总遭罪吗
更易发现和修复BUG
什么时候重构
特拨时间、定期重构—为重构而重构
三次法则
添功能和改错时一 并重构
试验完成后立即整理
坚持随时随地小步重构,但不刻意美化
在哪里重构
代码重复 分支语句
函数过长 过度耦合链
类太庞大 基本类型迷恋
条件逻辑太复杂 不恰当的暴露
纠缠不清 注释过多
解决方案蔓延
重构的策略
按照重构准则,有目的地,每次一小步
的修改、测试、完善
每次一 小步,不行就放弃
重写的条件
重构的成本远大于重写,预期效益 > 成本
对原功能有充分的了解,并能更好的再现
有足够的时间、人力,有人支持
重构与设计互补
预先设计可降低重构成本
重构减轻了预先设计的压力
软件设计更加快速高效
不再畏惧多变的需求
开发方式各有千秋,可以权衡互补
重构的辅助工具
重构的辅助工具
重构的辅助工具
小结
介绍了重构的基本话题
下一节的内容:
结合实际使用情况,介绍最常用的重构方法
重构的方法 (一)
重新组织函数
提炼函数
提炼为函数对象
合并相似代码
替换为更清晰的算法
使用堆栈对象简化善后处理
R1:提炼函数
时机
过长函数、多个步骤的复杂函数
循环、条件分支、申请释放间有大量代码
需要注释才能理解用途的代码
存在可复用的相似代码,分离领域变化
提炼到哪里
局部扩展函数、私有成员函数、公共类
R2:提炼为函数对象
做法
将相关的多个变量、函数或复杂代码移到新
类中,改为调用新类对象的函数
用途
分离复杂代码
适应变化需求,类可继续扩展
为相似功能重用代码
R3:合并相似代码
增加可选参数,支持附加功能
增加相似接口,复用实现代码
将相似语句改为模板函数
将相似语句改为宏调用
将相似功能移到同一个类
R4:替换为更清晰的算法
同样功能不同算法时,统一算法
尽量换成简洁易懂的算法
多了解SDK,不要总是自己实现
R5:使用堆栈对象简化善后
在析构函数中自动释放
资源切换
内存和句柄的释放
GDI对象选入/恢复
自动锁定/解锁
可用于所有这样的成对操作
避免遗漏、重复、分隔
重构的方法 (二)
重新组织数据
封装数据
改造全局变量
以对象取代数据项
自封装值域
封装群集
以数据类取代记录结构
以符号常量取代魔法数
R6:改造全局变量
将所有全局变量改为单实例对象
测试分析各个变量的作用
分拆变量到各个类
在各个类中应用重构
重构--改善代码结构 来自淘豆网m.daumloan.com转载请标明出处.