重构改善既有代码的笔记

本博客主要是学习《重构-改善既有代码》时的笔记和心得。

结论:

  1. 分层的思想,增加层级可以隔离变化
  2. 唯一不会变化的就是变化本身
  3. 符合6大基本原则
  4. 面向接口,面向对象编程,每个类都有抽象父类或者接口
  5. 不断的思考哪里还可以修改,还可以更加简洁,分层 层次更加清晰

重构时机:

当发现需要添加一个新的特性很麻烦的时候,阅读的很吃力,不好理解,看起来不优雅,不爽,就需要重构了。

重构第一章 一个Demo:

  1. 建立可靠的测试环境。
  2. 过长函数分解成小函数,每次修改后都要运行测试
  3. 变量名称修改,尽量改成符合人的阅读习惯
  4. 函数应该放到对应的类中
  5. 去除临时变量
  6. 运用多态取消掉条件判断:最好不要在另一个对象的基础属性中使用switch语句,就算要用也要在对象自己的数据上使用。

重构的原则:

对软件内部的一种调整,在不改变软件可观察的前提下,提高其可理解性,降低其修改成本。
开发过程中只做2件事:添加新功能和重构。不能同时做。

代码的坏味道:

1.重复的代码 :提炼
2.过长的函数:分解
3.过大的类 :分类
4.过长的参数:尽量用 对象代替
5.发散式变化:就是说一个类 引起其变化的原因 有2个以上。
6.散弹式修改:就是说遇到某种变化时,许多类都要修改
7.依恋情节:函数对某个类的兴趣高过对自己所属的类。
8.数据泥团:总是绑在一起出现的数据应该拥有属于他们自己的对象。减少参数和字段的个数
9.基本类型偏执:尽量使用对象 代替 数值
10.switch现身:尽量少用switch,使用多态消除
11.平行继承体系:让一个继承体系的实例去引用另一个继承体系的实例
12.消除冗余类:
13.夸夸其谈未来性
14.令人迷惑的暂时字段:把这些变量和相关函数 提到一个新的类中
15.过度耦合的消息链:一个对象请求另一个,另一个又去请求另另一个。
16.中间人:过度的委托了
17.2个类之间过于亲密
18.异曲同工的类:2个函数做同一件事,却有2个不同的签名
19.不完美的类库
20.纯数据类:
21.被拒绝的遗赠:使用委托 代替不必要的继承
22.过多的注释:并不是说注释不好,而是 完美可以用好的代码去代替 注释

构筑测试体系

1.junit测试框架

重构列表

就是重构时要从以下方面去思考:

  1. 名称
  2. 概要
  3. 动机
  4. 做法
  5. 范例

重新组织函数

1.提炼函数 extract method
2.内联函数 inline method
3.内联临时变量 inline temp
4.以查询取代临时变量replace temp with query
5.引入解释性变量introduce explain variable
6.分解临时变量split temporary variable
7.移除对参数的赋值remove assignments to parametes
8.以函数对象取代函数replace method with mehod object
9.替换算法substitute algorithm

在对象之间搬移特性

1.搬移函数move method
2.搬移字段move field
3.提炼类extract class
4.将类内联化inline class
5.隐藏委托关系hide delegate
6.移除中间人remove middle man
7.引入外加函数introduce foreign method
8.引入本地扩展introduce local extension

重新组织数据

1.自封装字段self encapsulate field
2.以对象取代数据值replace data value with object
3.将值对象改为引用对象change value to reference
4.将引用对象改为值对象change reference to value
5.以对象取代数组replace array with object
6.赋值被监视数据duplicate observed data
7.将单向关联改为双向关联
8.将双向关联改为单向关联
9.封装字段encapsulate field
10.封装集合encapsulate collection
11.以子类取代类型码
12.以类取代类型码
13.以状态或者策略模式取代类型码
14.以字段取代子类

简化条件表达式

1.分解条件表达式
2.合并条件表达式
3.合并重复的条件判断
4.移除控制标记
5.以卫语句取代嵌套条件表达式
6.以多态取代条件表达式
7.引入null对象
8.引入断言

简化函数调用

1.函数改名
2.添加参数
3.移除参数
4.将查询函数与修改函数分离(避免函数有副作用)
5.以明确函数代替参数
6.保持对象完整
7.以函数代替参数
8.引入参数对象
9.移除设置函数
10.隐藏函数-修改访问控制符为private
11.以工厂函数取代构造函数
12.封装向下转型
13.以异常取代错误代码
14.以测试取代异常

处理概括关系-主要是继承关系

1.字段上移
2.函数上移
3.构造函数本体上移
4.函数下移
5.字段下移
6.提炼子类
7.提炼超类
8.提炼接口
9.折叠继承体系
10.塑造模板函数
11.以委托取代继承
12.以继承取代委托

大型重构

不是为了重构而重构,是要有明确的目的时才进行重构
四个大型重构方法:
1.梳理并分离继承体系
2.将过程化设计转化为对象设计
3.将领域和表述/显示分离-就是分层的思想如 mvc mvp mvvm
4.提炼继承体系-就是增加中间层

总结

谨慎 和 2顶帽子
好的代码,是具有易扩展,易维护,健壮性,可读性,高内聚低耦合的特点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值