重构——识别代码坏味道

重构相关概念

重构定义

不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构

两顶帽子——一次只做一件事

  • 添加新功能
  • 重构

经典重构工作流程

  1. 测试保护
  2. 识别味道
  3. 采用手法
  4. 小步前进

SOLID原则

  • 单一职责原则SRP
    一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
  • 开闭原则OCP
    一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。
  • 里氏替换原则LSP
    派生的子类应该是可以替换基类的。也就是说任何基类可以出现的地方,子类一定可以出现。
  • 接口隔离原则ISP
    类不应该被迫依赖他们不使用的方法,也就是说一个接口应该拥有尽可能少的行为,它是精简的,单一的。
  • 依赖倒转原则DIP
    高层模块不应该依赖低层模块,他们都应该依赖抽象,抽象不应该依赖于细节,细节应该依赖于抽象。

简单设计原则

  • 通过所有测试
  • 尽可能消除重复
  • 尽可能清晰表达
  • 更少的代码元素

代码坏味道

冗余和重复

  • 重复代码
  • 过多的注释
  • 夸夸其谈未来性(过度设计)

局部膨胀

  • 过长的参数列表

耦合结构不良

  • 发散式变化(一个对象负责过多职责)
  • 霰弹式修改(一个错误需要多处修改)
  • 重复的switch
    用多态替换switch
    避免N:1:N结构

工程工具

  • 代码静态检查
  • 代码重复检查

重构手法

  • 抽取方法
  • 内联方法
  • 抽取类
  • 重命名
  • 移动方法

16字真言

旧的不变 新的创建 一步切换 旧的再见

简化语句

  • 移动语句
  • 合并条件表达式
  • 以卫语句取代嵌套条件表达式

重组函数

  • 提炼函数
  • 内联函数
  • 将查询函数与修改函数分离
  • 移除标记参数

重组数据

  • 拆分变量
  • 提炼类
  • 内敛类
  • 类继承体系重构手法系列
    成员搬移
    继承关系调整

推荐书籍

《重构——改善既有代码的设计》
《代码大全》
《人件》
《人月神话》
《你的灯亮着吗》

你可能感兴趣的:(赫赫快乐学习,重构)