重构学习(一)

重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下。提升其可理解性,下降维护成本。数据库

重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整期结构编程

 

重构的优势:性能优化

  • 改进软件设计
  • 使软件更容易理解
  • 帮助找到bug
  • 提升编程速度

 

重构应该随时随地进行,事不过三,三则重构:框架

  • 添加功能时重构
  • 修补错误时重构
  • 复审代码时重构

 

重构的难题:函数

  1. 数据库:常常会遇到数据库与应用紧耦合,非面向对象型数据库能够添加分隔层,如使用Hibernate之类的ORM框架;面向对象型数据库
  2. 修改接口:对于已发布接口修改是,应保留老接口,是老接口调用新接口,尽可能减小发布接口

 

一个项目开始时候应该考虑好各个模块的灵活性,但实现这种灵活性每每会须要花更多时间,并增长代码的复杂度,同时并非全部模块的灵活性都有用,因此在时间有限时考虑好经过重构将代码变得灵活的难度,若是不难能够先作非灵活实现,当有须要时在重构。性能

 

重构和性能:优化

    重构是代码更易于维护理解的同时,每每会牺牲性能。若是在一个性能要求极高的系统中,应该以性能为优先;对于大多数程序进行分析,会发现它吧大半时间都耗费在一小半代码上,一视同仁的性能优化,90%的努力都是收效甚微的,因此这时能够考虑,这90%的代码用重构得到代码的可读性优先。设计

    

代码的坏味道对象

  • Duplicated Code(重复代码):Extract Method抽出重复代码,放在合适的地方
  • Long Methods(过长函数):分解函数,遵循原则:每当感受须要以注释来讲明点什么的时候,咱们就把须要说明的东西写进一个独立函数中,并以其用途命名,可能用到Extract Method;
    • 若是有大量的临时变量,能够用Inline Temp和Replace  Temp With Query;
    • 用过参数过长,能够用Introduce Parameter Object和Preserve Whole Object;
    • 当临时变量的使用使你没法采用Extract Method可使用Replace Method with Method Object;
    • 当条件语句过长,循环逻辑难以理解,也应该考虑提出单独的函数,能够用Decompose Conditional
  • Large Class(过大的类):想利用单个类作太多的事情,内部每每就会出现太多实例变量;
    • 可使用Extract Class将几个变量一块儿提炼到新类中
    • 若是提出的类适合做为一个子类,可使用Extract Subclass

 

重构手法:接口

  1. Extract Method(提炼方法):将一段代码放进一个独立函数,函数名以用途命名
  2. Inline Method(内联函数):当某个方法只有一行,并且很好理解时,能够提出方法体直接使用
  3. Inline Temp(内联临时变量):将对临时变量的应用,替换成复制给临时变量的表达式
  4. Replace Temp With Query(以查询取代临时变量):降临时变量提出称为一个方法返回值
  5. Introduce Parameter Object(引入参数对象):以一个对象取代大量参数
  6. Preserve Whole Object(保持对象完整):当参数都是某对象的属性时,改成传递对象自己
  7. Replace Method with Method Object(以函数对象取代函数):将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段。而后能够在同一个对象内将大型函数分解成多个小型函数
  8. Decompose Conditional(分解条件表达式):从if-then-else中分别提出独立的函数
  9. Extract Class(提炼类):创建一个新类,将相关的字段和函数从旧类搬移到新类
  10. Extract Subclass(提炼子类):创建一个子类,将相关的字段和函数从父类搬移到子类
相关文章
相关标签/搜索