美文网首页前端译趣
代码重构之道

代码重构之道

作者: linc2046 | 来源:发表于2018-07-30 18:48 被阅读11次

1.干净代码

重构的主要目的是为了消除技术债务,将复杂转换成干净代码和简单设计。

干净代码主要有下面几个特点:

  • 其他工程师很容易理解

这里不是聊超级复杂算法,糟糕的变量命名和冗余的类和方法,黄金数字,你能说到的这些都会让代码变得臃肿

并且很难理解。

  • 没有重复代码

每次你不得不在重复代码中变更代码时,你不得不在所有的实例中做同样的变化同步,最终会提高认知负担,减慢进度。

  • 包含最小数量的类和辅助部分

更少的代码意味着更少的维护量,更少的 bug。

代码是一种责任,要保持简短和简单。

  • 可以通过所有测试

当只有 95%的代码通过测试时,你的代码就不会干净。

测试覆盖率是零时,你的代码就有问题。

  • 维护更加简单

2.脏代码/技术债务

每个人一开始都会尽力编写优质代码。

没有一个程序员会有意编写脏代码搞砸项目。

但什么时候代码会变得不干净呢?

脏代码的技术债务比喻最早是 Ward Cunningham 提出。

如果你从银行贷款,会让你更快付款。

你付出额外的经费加速过程。

代码也是这样,为了加快进度完成新功能,不写测试,最后会逐渐的减慢进度,最终

编写所有的测试来偿还技术债务。

  • 业务压力

    有时业务场景会迫使你在功能全部完成之前铺开。

    这时,各种补丁和黑科技都会在代码中出现,进而隐藏项目未完成的部分。

  • 缺乏技术债务结果的理解

有时你的雇员不会理解随着技术债务的积累,技术债务也会有收益,降低开发的节奏。

这会让后续重构变得更加困难,因为故那里层不会重视重构的价值。

  • 无法抵制组件之间的复杂依赖

这会发生在项目组装成大型应用,而不是独立产品模块时。

这种场景中,项目中的任何变化将会影响其他部分。

团队开发会变得更加困难,因为很难分割每个成员的工作。

  • 缺乏测试

缺乏快速反馈鼓励快速但有风险的折中方案或替代技巧。

更加糟糕的场景中,生产环境会在没有预先测试的情况下集成和实施这些变化。

这会产生灾难性的后果,例如,某项修复会发送奇怪的测试邮件给数千计客户,更糟糕的是,导致整个数据库崩溃。

  • 缺乏文档

缺乏文档將降低新人熟悉项目的速度,如果有关键人员离开时,会加快项目停滞。

  • 缺乏团队成员之间的互动

如公司缺乏完整的知识库,开发人员将会获得过时的项目过程信息。

当导师错误地培训初级开发者时,这种情况会恶化。

  • 不同分支长期并行开发

  • 重构延期

项目需求一直在变,有时部分代码会废弃成为累赘,必须重新设计以满足新需求。

另外一方面,项目开发者每天都在围绕废弃部分写新代码。因此,重构延期越长,未来需要重做的关联代码会更多。

  • 缺乏兼容性监控

当所有开发者都在同一个项目编写他们认为合适的代码时,就如同上个项目一样,就会缺乏相应的监控。

  • 代码不完整

当开发者不知道如何编写合适的代码时会导致代码不完整。

3.何时重构

  • 三原则

    当第一次就把事情做好时;

    当第二次重复类似的事情时,不得不重复第一次的套路;

    当你开始做第三次时,开始重构;

  • 添加新功能时

    • 重构帮助理解其他人的代码,如果你不得不处理其他人的脏代码时,首先尝试重构。

    清晰代码更容易理解。你的代码改进不仅仅为了自己,也为了那些之后使用这些代码的人。

    • 重构可以更容易地添加新功能,很容易改变清晰代码。
  • 修复 BUG

    • bug 和现实生活中一样,它们生活在最阴暗肮脏的地方,清除代码和错误实际上会暴露它们。

    • 管理合适有前瞻性的重构会降低特定重构任务的需求。

  • 代码审查

    代码审查可能是上线之前清洁代码的最后机会。

    最好和作者进行结对审查,可以很快修复简单问题,预估时间修复更难的问题。

4.如何重构

重构应当通过一系列的变化,会逐步优化当前代码,保证程序正常工作。

  • 正确实现重构清单

    • 代码应该变得简化

    • 新功能重构期间不能继续增加

    • 重构完成后必须通过所有测试

5.代码味道

  • 代码肿胀

    代码肿胀是指代码、方法、类上升巨大的数量以至于很难维护。

    通常代码肿胀不会突然出现,而是随着程序演进逐步积累。

    • 冗长方法

    • 原始类型冗余

    • 笨重数据

    • 大型类

    • 长参数列表

  • 滥用面向对象

    • 使用不同接口替代类

    • 拒绝遗留

    • switch 声明

    • 临时字段

  • 代码重构的阻碍

    • 分歧变化

    • 并行继承结构

    • 散弹式修改

  • 冗余代码

    • 注释

    • 重复代码

    • 数据类

    • 无用代码

    • 懒惰类

    • 投机性

  • 代码耦合

    • 功能聚合

    • 不完整的类库

    • 中间人

    • 不合适的耦合

    • 消息链

6.重构技巧

  • 方法组合

    • 导出方法

    • 使用临时变量替换查询

    • 使用方法对象替换方法

    • 内联方法

    • 分割临时变量

    • 导出变量

    • 删除参数赋值

    • 替代逻辑

    • 内联临时变量

  • 转移不同对象的功能

    • 迁移方法

    • 隐藏代理

    • 引入外部方法

    • 迁移字段

    • 移除中间调用

    • 引入本地扩展

    • 导出类

    • 内联类

  • 合理组织数据

    • 改变值为引用类型

    • 改变引用类型为值

    • 改变单向联系为双向联系

    • 改变双向联系为单向联系

    • 使用类替换类型代码

    • 使用子类替换类型代码

    • 使用状态或策略替换类型代码

    • 使用字段替换子类

    • 自封装字段

    • 封装字段

    • 使用对象替换数据值

    • 封装集合

    • 使用对象替换数组

    • 使用符合常量替换魔法数字

  • 简化条件表达式

    • 巩固条件表达式

    • 巩固重复条件片段

    • 分解条件表达式

    • 使用多态替换条件表达式

    • 移除控制标志

    • 使用守卫语句替换嵌套条件表达式

    • 引入空对象

    • 引入断言

  • 简化方法调用

    • 添加参数

    • 删除参数

    • 重命名方法

    • 隔离修饰符和查询

    • 参数化方法

    • 引入参数对象

    • 保留整个对象

    • 删除设置方法

    • 替换参数为显式方法

    • 替换参数为方法调用

    • 隐藏方法

    • 替换构造函数为工厂方法

    • 替换错误代码为错误

    • 使用测试替换错误

  • 处理通用场景

    • 提升字段

    • 提升方法

    • 提升构造函数体

    • 降级字段

    • 降级方法

    • 导出子类

    • 导出父类

    • 导出接口

    • 收拢层级

    • 形成模板方法

    • 使用代理替换继承

    • 使用继承替换代码

7.译者注

  • 原文链接

  • 原文有删减,因译者水平有限,如有错误,欢迎留言指正交流

  • 因原文过长,后续持续更新

相关文章

  • 代码重构之道

    1.干净代码 2.脏代码/技术债务 3.何时重构 4.如何重构 5.代码味道 6.重构技巧 7.译者注 1.干净代...

  • 代码重构之道

    1. 什么是重构 1.1 重构(Refactoring) “重构”这个概念对于当代的开发人员来说已经不陌生,它最早...

  • 代码整洁之道(重构)

    1、避免过长的类,不超过500行 2、避免过长的参数,不超过5个 3、防止数据发散变化 4、代码自描述 5、勤于重...

  • 2019-03-09

    《代码之美》 《代码之殇》 《重构-改善既有代码的设计》 《程序员修炼之道 从小工到专家》

  • 写出强而有力的代码

    导师推荐的几本书: 《Effective java》 《代码整洁之道》 《重构,改善既有代码的设计》 Effect...

  • 程序员职业素养

    一、技能素质 1.1 软技能 数据结构和算法 设计模式 网络TCP/IP 代码整洁之道 重构改善既有代码 代码大全...

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 重构之道:代码浴火重生

    “整洁的代码简单直接。整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控...

  • 书籍推荐

    1.代码整洁之道 2.重构—-改善既有代码的设计 3.Android开发艺术探索 4.Effective Java...

  • 代码整洁之道CheckList

    总结看完《代码整洁之道》这本书之后得到的CheckList,可以用来指导之后的代码review和重构。 命名 名副...

网友评论

    本文标题:代码重构之道

    本文链接:https://www.haomeiwen.com/subject/rvzfvftx.html