关于代码重构的感触

用户头像
极客
关注
发布于: 2020 年 06 月 24 日

代码重构

如何重构代码,我相信大多数开发人员都经历过,大多数老项目或者从其他人手里接手的项目,刚开始大多都有抵触情绪,能挑出以前代码的一大堆问题,多数人脑子里都有有这种想法,如果条件允许,很想自去重写现在的代码。而重写这个过程,其实就是重构。

重构不是一个一个一蹴而就的事,需要长期的实践和经验才能够完成得很好,每一次重构或者读别人代码,其实就是不断学习的过程,经历不断踩坑,不断填坑的过程后这就是成长。重要是我们的面对问题时的态度和心态。

提到重构,给大家推荐一本书《重构:改善既有代码的设计》。

以下部分摘自《重构:改善既有代码的设计》。

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.要善于发现问题,要有好奇心。



用户头像

极客

关注

还未添加个人签名 2018.03.29 加入

还未添加个人简介

评论

发布
暂无评论
关于代码重构的感触