我是靠谱客的博主 慈祥羽毛,最近开发中收集的这篇文章主要介绍重构,改善既有代码的设计 -- 阅读笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

代码的坏味道

神秘命名

直观明了,能够清晰地表明自己的功能和用法

  • 改变函数声明
  • 变量改名
  • 字段改名

重复代码

两个函数含有相同的表达式:

  • 提炼函数

  • 移动语句重组代码顺序,再提炼

一个超类的不同子类中:

  • 函数上移、避免互相调用

过长函数

什么时候分解函数?

  • 一段代码需要以注释来说明
  • 函数做什么、如何做 (函数名解释用途)

如何分解?

  • 大段代码:提炼函数
  • 太多的临时变量:以查询取代临时变量
  • 参数列表过长: 引入参数对象、保持对象完整 、以命令取代函数
  • 条件表达式: 分解条件表达式
  • 庞大的switch: 每个分支提炼函数、多态取代条件表达式
  • 循环:提炼函数、(难以命名)再拆分循环

过长参数列表

  • 以查询取代参数
  • 保持对象完整
  • 引入参数对象
  • 移除标记参数
  • 函数组合成类

全局数据

  • 封装变量

可变数据

  • 封装变量 – 数据更新操作在几个函数内执行

  • 拆分变量 – 拆分为不用用途的变量

  • 查询函数、修改函数分离 – 不调用有副作用的代码

  • 移除设值函数 – 缩小变量作用域

  • 以查询取代派生变量 – 在其他地方计算可变数据

  • 函数组合成类、函数组合变换 – 限制需要对变量进行修改的代码量

  • 引用对象改为值对象 – 一个变量内部包含数据,直接替换整个数据结构

发散式变化

  • 拆分阶段 – 发生变化的两个方向有先后次序
  • 搬移函数 – 将处理逻辑分开
  • 提炼函数、提炼类

霰弹式修改

  • 搬移函数、搬移字段 – 需要修改的代码放入同一个模块
  • 函数组合成类 – 多函数操作相似的数据
  • 函数组合成变换 – 函数的功能是转化or充实数据结构
  • 拆分阶段 – 一些函数输出可以组合供给一段使用这些计算结果的逻辑
  • 内联函数、内联类 – 将分散的逻辑聚合

依恋情结

  • 搬移函数 – 函数和数据交互过多
  • 提炼函数、搬移函数 – 函数中的一部分代码依恋过多

数据泥潭

  • 提炼类 – 将数据项整合
  • 引入参数对象保持对象完整 – 为提炼的类瘦身

基本类型偏执

  • 以对象取代基本类型 – 将单独存在的数据值替换为对象
  • 以子类取代类型码、以多态取代条件表达式 – 替换的数据值是控制条件行为的类型码

重复的switch

  • 以多态取代条件表达式

循环语句

  • 以管道取代循环(filter,map)

冗赘的元素

  • 内联函数、内联类
  • 折叠继承体系 – 类元素处于一个继承体系中

夸夸其谈通用性

  • 折叠继承体系 – 某个抽象类没有作用
  • 内联函数、内联类 – 不必要的委托
  • 改变函数声明 – 函数的某些参数未用or一些不必要的参数
  • 移除死代码

临时字段

  • 提炼类、搬移函数
  • 引入特例 – 变量不合法的情况下创建一个代替对象

过长的消息链

  • 隐藏委托关系
  • 提炼函数、搬移函数

中间人

  • 移除中间人 – 过度运用委托封装
  • 内联函数 – 将函数放入调用端

内幕交易

  • 搬移函数、搬移字段 – 减少私下交流

  • 隐藏委托关系 – 将模块变成两者中介

  • 以委托取代子类、以委托取代超类 – 离开继承关系

过大的类

  • 提炼类 – 将几个关联的变量提炼到一个新的类中
  • 提炼超类、以子类取代类型码 – 简单

异曲同工的类

未来可以替换

纯数据类

  • 封装记录 – 一些public字段
  • 移除设置函数 – 一些不被其他类修改的字段
  • 搬移函数、提炼函数 – 将一些调用行为搬移到数据类中

被拒绝的遗赠

  • 函数下移、字段下移 – 超类只持有子类共享的东西
  • 以委托取代子类、以委托取代超类 – 舍弃继承体系

注释

需要撰写注释时,请先尝试重构,试着让所有的注释都变得多余。

  • 提炼函数、改变函数声明、引入断言

最后

以上就是慈祥羽毛为你收集整理的重构,改善既有代码的设计 -- 阅读笔记的全部内容,希望文章能够帮你解决重构,改善既有代码的设计 -- 阅读笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部