重构

作者: blue青清 | 来源:发表于2017-11-10 06:57 被阅读0次

    概念

    a.重构是一种以可控的方式整理代码的艺术,在不改变软件可观察行为的前提下改善结构,让软件始终可维护,保证开发效率
    
    • 什么时候开始
    1. 添加新功能,当添加起来比较麻烦时,如历史代码完全无法理解和修改;
    2. 修复bug的过程中,如果bug难以定位
    3.事不过三:在经常需要修改的烂代码上做重构才有最大收益。
    4.代码评审时
    
    - 什么时候停止
    

    直到符合四条原则停止:通过测试,没有重复,表达意图,最少元素

    大型系统可选择性重构

    1. 不会被执行的烂代码 -删除
    2. 运行稳定,基本不会改动的烂代码
    3. 经常发现 Bug 的烂代码
    4. 经常需要变更的烂代码
    • 流程
       1.测试保护-识别味道(22)-采用手法(66)-测试,提交代码
       2.测试-修改-测试:所以任意一个重构点,都能做到切换到新增功能,而不需要回滚已做的重构;
    
    • 随时终止,断点续传
     - 如重命名一个方法,共100个调用点,改到50个时,停下来切换feature开发时,
    - 另外50个调用点仍能使用旧的方法名
    - 一般的做法是旧函数去调用新函数;
    先不改动旧的结构,直接创建新的结构,当新结构完成时,再一个个切换,当确认所有的都切换后,再删除旧的
    
    • 过程可逆
    1.不能保证重构后更好或者更好
    2.但能够保证1分钟就重构会回来,因为所有的重构方法都是双向的
    
    • 始终工作,持续集成
    在不改变软件可观察行为的前提下,不需要为重构单构建分支,重构过程可以做到feature开发在同一分支上持续集成交付
    
    • 消除坏味道
    1.开始:识别一个坏味道(bad smell)
    2.结束:消灭一个坏味道
    不以消除坏味道为目标的重构都是耍流氓
    

    坏味道

    22种常见坏味道:
    1.通过增加编码经验获取判断直觉
    2.更快的方式是大量阅读优秀的开源代码
    分为5类

    • 膨胀剂

      • 太长的方法【小函数拥有好名字更容易被理解】
      • 太大的类
      • 基本类型偏执
      • 太多参数
      • 数据泥团
    • 滥用oo

      • switch语句
      • 临时字段
      • 被拒绝的馈赠
      • 异曲同工的类
    • 难以修改

      • 发散式变化
      • 散弹式变化
      • 平行继承体系
    • 可有可无

      • 注释
      • 重复代码
      • 冗杂类
      • 数据类
      • 死代码
      • 夸夸其谈未来性
    • 耦合

      • 🍎特性依恋
      • 狎昵关系
      • 消息链
      • 中间人
      • 不完整的类库

    常用手法

    共66种常用手法,可以分为6大类:http://www.jianshu.com/p/ffd89d5df276
    http://www.jianshu.com/p/94dc3a2f8598

    • 重组函数

      • 抽取方法
      • 内联方法
      • 抽取变量
      • 内联临时变量
      • 查询取代临时变量
      • 分解临时变量
      • 移除对参数赋值
      • 以函数对象取代函数
      • 替换算法
    • 搬移特性

      • 搬移函数
      • 搬移字段
      • 提炼类
      • 内联类
      • 隐藏委托关系
      • 移除中间人
      • 引入外加函数
      • 引入本地拓展
    • 组织数据

      • 自封装字段
      • 以对象取代数组
      • 以对象取代数据值
      • 复制被监视数据
      • 将值对象改为引用对象
      • 引用对象改为值对象
      • 单向关联到双向关联
      • 双向关联到单向关联
      • 字面常量取代魔法数
      • 封装字段
      • 封装集合
      • 数据类取代记录
      • 字段取代子类
      • 子类取代类型码
      • 类型取代类型码
      • state/Strategy取代类型码
    • 简化条件

      • 分解条件表达式
      • 合并条件表达式
      • 多态取代条件
      • 卫语句取代条件
      • 合并重复条件片段
      • 引入null对象
      • 移除控制标记
      • 引入断言
    • 简化函数调用

      • 函数改名
      • 添加参数
      • 移除参数
      • 引入参数对象
      • 零函数携带参数
      • 用函数取代参数
      • 保留完整对象
      • 移除设值函数
      • 隐藏函数
      • 以测试取代异常
      • 封装向下转型
      • 以异常取代错误码
      • 以工厂函数取代构造函数
      • 将查询函数和修改函数分离
    • 处理概括函数

      • 字段上移
      • 字段下移
      • 函数上移
      • 函数下移
      • 构造函数本体上移
      • 抽取字类
      • 抽取超类
      • 抽取接口
      • 塑造函数模版
      • 折叠继承体系
      • 以委托取代继承
      • 以继承取代委托

    工具

    相关文章

      网友评论

          本文标题:重构

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