重构
重构的主要目的是应对技术债,它将混乱转化为清晰的代码和简洁的设计。
重构是什么
清晰的代码(Clean code)
- 不包含重复代码,减少重复修改的负担
- 包含最少数量的类和其他可移动部分,减少维护工作和错误
- 通过所有测试
技术债(Technical debt)
- 业务压力,平常打的临时补丁
- 缺乏对技术债的理解,管理层看不到它的价值
- 未能应对组件的严格一致性?
- 缺乏测试
- 缺乏文档
- 团队成员缺乏互动,知识库没有共享,流程和信息过时
- 多分枝长期并行开发
- 延迟重构
- 缺乏合规性监控,每个人都按照上个项目的风格写代码
- 无能,不知道怎么写像样的代码
何时重构
- 三分法则:第一次做某件事时,只需要完成。第二次做类似的事情时,虽然有重复,但也还是做了。第三次就需要重构了
- 当前添加功能时:新代码更容易进行重构
- 当修复一个bug时
- 在进行代码审查时
如何重构
- 代码应该更清晰
- 重构期间不应该创建新功能
- 重构后所有测试都要通过
代码异味(Code Smells)
肥胖者(Bloaters)
- 长方法:一个方法包含太多行。超过十行,应该考虑抽到新方法中
- 大类:一个类包含太多字段、方法、代码行。应该提取类和接口出来
- 痴迷于原始类型(Preimtive Obsession):使用基本类型而不是小型对象。当基本字段过多时,可以考虑把字段和行为都移到单独的类里
- 长参数列表:一个方法超过三、四个参数。可以引入参数对象
- 数据块(Data Clumps):这些数据块应该放到自己的类中
滥用面向对象
- 巨大的switch和if:用多态来解决
- 临时字段:很多时候都是空的,也是提取类来处理
- 拒绝继承:父类中的很多方法和属性用不上,不需要继承或者把子类才用的字段和方法放到子类
- 不同接口的替代类:两个类的功能一样但是方法名不一样,可能是有人不知道已经实现了,应该保留一个
相关文章