重构

作者: 微笑_d797 | 来源:发表于2019-02-22 13:50 被阅读0次

[TOC]

重构原则

  • 重构定义

重构对软件内部结构的一种调整,目的是不改变软件可观察行为的前提下,提高其可理解性,降低修改技术


  • 为何重构

1.重构改进软件设计

2.重构使下个接盘的人更容易理解代码

3.重构期间可能可以找到bug

4.重构提高编程速度


  • 何时重构

1.三次法则(==第一次做某事的时候可以直接做第二次做的时候会产生反感第三次做得时候就应该重构==)(ps:比如一个app里面有多个发送验证码操作如果只有一次可能无须封装但如果有两次可能第二次已然不会封装,但是第三次就应该有封装的必要了)

2.添加新功能时

3.修补错误时

4.复审代码时重构


  • 何时不该重构

1.现有代码已经无法理解,这个时候只能重写而不是重构否则重构比重写花的时间要多的多

2.项目时间急的时候也不适合重构

如何重构

什么样的代码应该重构

如果尿布臭了,就换掉它
——beck奶奶

2.重复代码过多

3.过长的行为

4.免过大的类

5.发散式变化(假如新加一个功能我这需要改3个行为,在加一种我这需要改4种行为,这样可以将其分化为2个对象符合面向对象里的单一原则 )

6.霰弹 一种变化引起多个类相应修改 应将需要修改的类封装

7.依恋情节将数据和对数据操作行为包装在一起,比如执行某个行为调用了另一个类里超过半数的行为这个时候应该将该行为移动至其他地方


重构的几种姿势

过长函数和过多的参数会使人看起来这个函数很难受里面包含着特别复杂的逻辑。

重新组织函数

提炼函数最大的困难就是处理局部变量,处理临时变量时候可以用查询替代临时变量,去掉所有可以去掉的临时变量。如果很多地方都用到了临时变量,需要先分解临时变量,使其更容易被替换,如果临时变量是在特别乱的话难以替换那么需要使用以函数对象使用函数,这样可以分解混乱的函数,参数带来的问题比临时变量稍微少一些,前提是是不在函数内赋值给他们,如果已经这么做了需要移除对函数的赋值,函数分解完毕后也可以在此基础上优化算法,替换算法

提炼函数

将一个行为分解成两个个行为

内联函数

在函数调用点插入函数本体,然后移除该函数

内联临时变量

临时变量只被赋值一次 变成一个简单的表达式

将所有对变量的引用动作,替换为它赋值的那个表达式自身

let baseprice = anOrder.basePrice()
return baseprice > 1000

内联后

return anOrder.basePrice() > 1000

(提炼函数)和(内联函数)其实是对立的,里面的重构方法有很多是对立的,其实我觉得总言之是为了增加程序的可读性和聚合性来看待(提炼函数)和(内联函数)选择。

以查询替代临时变量

以一个临时变量保存某一表达式的运算结果,替换后方便多处引用。

将这个表达式提炼到一个独立函数中。这个临时变量的所有引用 点替换为对新函数的调用

let baseprice = quantity * itemprice
if baseprice > 1000 {
    return basePrice * 0.95
}else {
    return basePrice * 0.97
}

var basePrice:Double {
    get {
        return  quantity * itemprice
    }
}
...
if baseprice > 1000 {
    return basePrice * 0.95
}else {
    return basePrice * 0.97
}

引入解释性变量

分解临时变量

移除对参数的赋值

以函数对象取代函数

替换算法

在对象间搬移特性

搬移函数

搬移字段

将类内联化

隐藏委托关系

移除中间人

相关文章

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 重构代码之美

    什么是重构; 为什么要重构; 什么时候重构; 怎样避免重构的现象; 重构的难点在哪里; 如何来实施代码重构; 重构...

  • 30 - 重构之代码解耦

    重构可以分为大规模高层重构(简称“大型重构”)和小规模低层次重构(简称“小型重构”)。大型重构是对系统、模块、代码...

  • 重构、重构、重构

    【待完成】

  • 重构

    为何重构? 1.重构改进软件设计 2.重构使软件更容易理解 3.重构帮助找到bug 4.重构提高编程速度 何时重构...

  • Effective Refactoring in C++ (二)

    如何实施重构 稍微复杂的重构,基本都是由一系列的重构手法组成. 《重构》一书中针对各种重构场景,给出了大量的重构手...

  • 代码重构流程

    目录 重构功能名称 需求整理 需求评审 设计方案 设计评审 代码重构 重构验收 汇总意见 重构功能名称 待重构功能...

  • 把《重构》变成工具书

    前言一、把它变成工具书二、概述何谓重构注释为何重构何时重构重构、架构和YAGNI重构与软件开发过程重构与性能如何重...

  • 《重构》一书总结(二)

    《重构》一书总结(二) 重构的重点,在于对那些代码进行重构,如果重构不当,反而适得其反。 重构代码终结如下 1.D...

  • 《重构》一书经典总结(一)

    《重构》一书经典总结(一) 为何重构 1.重构改进软件设计2.重构使软件更容易理解3.重构提交稿编程速度4.重构帮...

网友评论

      本文标题:重构

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