重构学习(一)

来源:互联网 发布:1个域名指向多个ip 编辑:程序博客网 时间:2024/05/15 17:45
  1. 文档编写:记录学习《重构 改善既有代码的设计》。时间久了发现程序员这个行业的魅力就是神秘。
  2. “我不是个伟大的程序员,我只是个有这一些优秀习惯的好程序员。”重构能够帮助我更有效地写出强健的代码。

一、重构

1.重构定义

  1. 名词形式:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
  2. 动词形式:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
  3. “重构就是在整理代码吗?”从某种角度上,是的。但是重构不止于此,因为它提供了一种更高效且受控的代码整理技术。
  4. 重构的目的是使软件更容易被理解和修改。你可以在软件内部做很多修改,但必须对软件可观察的外部行为制造成很小变化,或设置不造成变化。
  5. 使用重构技术开发软件时,你把自己的时间分配给两种截然不同的行为:添加新功能,以及重构。添加新功能时,你不应该修改既有代码,只是增加功能。通过测试,你可以衡量自己的工作进度。重构时你就不能添加功能,只管改进程序结构。此时,你不应该添加任何测试(除非发现之前的问题)。

2.为何重构

  1. 重构改进软件设计。贸然修改代码,程序将逐渐失去自己的结构。
  2. 重构使软件更容易理解。重构就是对程序的修改在不影响功能的前提下,使代码更简洁更易懂。
  3. 重构帮助找到bug。
  4. 重构提高变成速度。

3.重构的使用

  1. 使用重构技术开发软件时,你要把自己的时间分配给两种截然不同的行为:添加新功能,以及重构。
  2. 添加新功能:不应该修改既有代码,只管添加新功能。
  3. 重构:不在添加新功能,只管改进程序结构。

4.何时重构

  1. 三次法则:第一次做某件事时只管去做,第二次做类似的时会产生方案,但无论如何还是可以去做;第三次再做类似的事情,你就应该重构。
  2. 事不过三,三则重构。
  3. 添加功能时重构:当添加新功能时可以先进行重构。
  4. 修补错误时重构:如果收到一份错误报告,这就是需要重构的信号,因为显然代码还不够清晰—-没有清晰到让你能一眼看到bug。
  5. 复审代码时重构。

二、重构的重点

  1. 《重构改善既有代码的设计》中我觉得比较重要的东西就是Kent Beck的说法摘写,真的很厉害说的很清楚。
  2. 对于“为什么重构有用?”。程序编写不是牺牲明天为了完成今天的任务的编写。
  3. “是什么让程序如此难以了解?”
    a.难以于都的程序,难以修改;
    b.逻辑重复的冲虚,难以修改;
    c.添加新行为时需要修改已有代码的程序,难以修改;
    d.带负载条件逻辑的程序,难以修改。
  4. 我们希望程序:(1) 容易阅读;(2)所有逻辑都只在唯一地方指定;(3)新的改动不会危及现有行为;(4)尽可能简单表明田间逻辑;
  5. 对于“间接层和重构”。计算机科学是这样一门科学:它相信所有问题都可以通过增加一个间接层来解决。间接层的某些价值:
    a.允许逻辑共享。比如一个子函数在两个不同的地方被调用,或超类中的某个函数被所有子类共享。
    b.分开解释意图和实现。你可以选择每个类和函数的名称,这给了你一个解释自己意图的机会。类和函数内部则解释实现这个意图的做法。如果类和函数内部又以更小单元的意图来编写,你所写的代码就可以描述其结构中的大部分重要信息。
    c.隔离变化。很可能我在两个不同地方使用同一对象,其中一个地点我想改变对象行为,但如果修改了它,我就要冒同时影响两处的风险,为此我做出一个子类,并在需要修改处引用这个子类,现在,我可以修改这个子类而不必承担无意中影响另一处的风险。
    d.封装条件逻辑。对象有一种奇妙的机制:多态消息,可以灵活而清晰地表达条件逻辑,将条件逻辑转化为消息形式,往往能降低代码的重复、增加清晰度并提高弹性。
0 0
原创粉丝点击