读-Martin Fowler-重构

重构领域的经典之作,开发必看,推荐之!

第一章讲了一个案例引入重构,第二章讲了重构的一些原则,如何为重构,何时重构等,理论性的东西,过,从第三章开始。

代码的坏味道

何时需要重构,作者用了代码的坏味道来描述,坏味道体现在:

  1. Duplicated Code;
  2. Long Method;
  3. Large Class;
  4. Long Parameter List;
  5. Divergent Change(发散式变化):一个类受到外界多个变化的影响,通常是一个类承担了多个责任,违反了单一职责原则;
  6. Shotgun Surgery(霰弹式修改):跟5不一样,这个是,外界的一个变化,导致多个类的修改;
  7. Feature Envy(依恋情结):比如A类中一个方法,这个方法处理的是B类中数据和调用的是B类中方法,那么就可以将其移到B类中;
  8. Data Clumps(数据泥团):一些数据项总是一起出现使用,那么就可以单独提出来;
  9. Primitive Obsession(基本类型偏执):简单的为一些经常出现的基本类型建立对象,如开始结束时间表示一个时间范围等;
  10. Switch Statements;
  11. Parallel Inheritance Hierarchies(平行继承体系):shutgun surgery的特例,比如我一个类中的方法,复制来复制去,然后要改动的时候,要改动所有这些类;
  12. Lazy Class(冗余类);
  13. Speculative Generality(夸夸其谈未来性):有时候,我们会为类或方法加上一些不需要的东西,期待未来某天会使用;
  14. Temporary Field(令人迷惑的临时字段);
  15. Message Chains(过度耦合的消息链):例如A调用B,B调用C;
  16. Middle Man(中间人):这里指的是过度使用代理模式,一个类中的大部分方法都是另一个类方法的代理,那这个类就不一定需要存在;
  17. Inappropriate Intimacy(狎昵关系):2个类的关系过于亲密;
  18. Alternative Classes with Different Interfaces(异曲同工的类);
  19. Incomplete Library Class(不完美的类库);
  20. Data Class(纯稚的数据类):拥有一些字段以及相关访问,贫血的类,只有数据,没有行为,只是数据集合,对这些类,需要更合理的访问封装;
  21. Refused Bequest(被拒绝的遗赠):继承情况下,子类可能存在不支持父类的情况,或者不全支持,那可能是继承关系出现问题了;
  22. Comments(过多的注释);

构筑测试体系

之前我们已经有了开发冒烟测试/测试环境/预发布环境测试3类,缺少单元测试,最近公司要强推单元测试,后面会更加重视这个东西了。

自动化测试,Junit测试/mock,覆盖率等。

重新组织函数

  1. Extract Method(提炼函数):

    • 有一段代码可以被组织在一起并独立出来,那就将这段代码放进一个独立函数中,用函数名解释该函数的用途;
    • 提炼函数需要注意变量的提取;
    • 函数名的命名要真正说明函数内容;
  2. Inline Method:

    • 一个函数的本体与名称同样清除易懂,在函数调用点插入函数本体,然后移除该函数;
    • 如果函数体简短易懂,就没有必要单独出来成一个函数;
  3. Inline Temp(内联临时变量):

    • 有时候临时变量会被滥用,只是简单赋值一次计算下的,就建立个临时变量,没有必要;
  4. Replace Temp with Query(以查询取代临时变量):

    • 以一个临时变量保存某一表达式的运算结果,将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用替换为对函数
重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常常新。 第1章 重构,第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组statement() 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构的难题 2.6 重构与设计 2.7 重构与性能 2.8 重构起源何处 第3章 代码的坏味道 3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大的类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shotgun Surgery(霰弹式修改) 3.7 Feature Envy(依恋情结) 3.8 Data Clumps(数据泥团) 3.9 Primitive Obsession(基本类型偏执) 3.10 Switch Statements(switch惊悚现身) 3.11 Parallel InheritanceHierarchies(平行继承体系) 3.12 Lazy Class(冗赘类) 3.13 Speculative Generality(夸夸其谈未来性) 3.14 Temporary Field(令人迷惑的暂时字段) 3.15 Message Chains(过度耦合的消息链) 3.16 Middle Man(中间人) 3.17 Inappropriate Intimacy(狎昵关系) 3.18 Alternative Classes with Different Interfaces(异曲同工的类) 3.19 Incomplete Library Class(不完美的库类) 3.20 Data Class(纯稚的数据类) 3.21 Refused Bequest(被拒绝的遗赠) 3.22 Comments(过多的注释) 第4章 构筑测试体系 4.1 自测试代码的价值 4.2 JUnit测试框架 4.3 添加更多测试 第5章 重构列表 5.1 重构的记录格式 5.2 寻找引用点 5.3 这些重构手法有多成熟 第6章 重新组织函数 6.1 Extract Method(提炼函数) 6.2 Inline Method(内联函数) 6.3 Inline Temp(内联临时变量) 6.4 Replace Temp with Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量) 6.6 Split Temporary Variable(分解临时变量) 6.7 Remove Assignments to Parameters(移除对参数的赋值) 6.8 Replace Method with Method Object(以函数对象取代函数) 6.9 Substitute Algorithm(替换算法) 第7章 在对象之间搬移特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移字段) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏“委托关系”) 7.6 Remove Middle Man(移除中间人) 7.7 Introduce Foreign Method(引入外加函数) 7.8 Introduce Local Extension(引入本地扩展) 第8章 重新组织数据 8.1 Self Encapsulate Field(自封装字段) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将值对象改为引用对象) 8.4 Change Reference to Value(将引用对象改为值对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值