什么是重构列表

重构方法需要以一种特定的格式记录下来。按照格式记录下来的重构方法的集合叫重构列表

重构的记录格式

每个重构手法可分为5个部分:

名称

构建重构词汇列表,名称当然是很关键的了,要充分的表达出重构的核心关键;

概要

介绍重构手法的功能,以及应用场景;便于我们查找重构手法;包括三个部分:

  • 一句话介绍重构能解决的问题
  • 一段简短陈述,介绍你应该做的事
  • 一副速写图,简单展现重构前后示例,可以是一段代码或UML图

动机

介绍为什么要用以及什么情况下要用这种重构手法;

做法

简明扼要的介绍怎么一步步实现这种手法;

A.做法出自我的笔记,这些笔记是为了我在一段时间不做重构后还记得怎么做。如果清楚知道该使用哪个重构,但不知道具体步骤可以查看做法;但如果是初次使用的话,还 要结合范例。

范例

以一个简单的例子说明如何实现这种手法;

寻找引用点

很多重构需要找到一个字段,一个方法,一个类的所有引用点。使用文本查询工具.比如idea的文本查询和代码预编译。

这些重构手法到底有多成熟

本书中提到的重构手法(第3章)。都是作者试过的。但是不能一本不变。依具体情况具体使用

demo

名称:提炼函数
概要:你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数,并让函数名称解释该函数的用途。

void printOwing() {   
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
    //print details  
    System.out.println ("name: " + _name);   
        System.out.println ("amount " + getOutstanding());   
}   

重构后
void printOwing()  {  
    printBanner();   
    printDetails(getOutstanding());   
} 
Void printBanner()  {  
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
}  
void printDetails (double outstanding)   {   
    System.out.println ("name: " + _name);   
    System.out.println ("amount " + outstanding);   
}

动机

过长的函数或者一段需要注释才能让人理解用途的代码,就应该将这段代码放进一个独立函数中。简短而命名良好的函数的好处:
1)如果每个函数的粒度都很小,那么函数被复用的机会就更大;
2)这会使高层函数读起来就想一系列注释;
3)如果函数都是细粒度,那么函数的覆写也会更容易些。

做法

  • 创造新函数,以用途命名
  • 提炼代码到函数中
  • 检查变量名是否符合规范
  • 在源函数中,将被提炼代码替换为函数引用
  • 测试

范例

 重构前
 void printOwing() {   
        //print banner  
        System.out.println(“*********”);  
        System.out.println(“Banner”);  
        System.out.println(“*********”);  
        //print details  
        System.out.println ("name: " + _name);   
            System.out.println ("amount " + getOutstanding());   
    }   

重构后
void printOwing()  {  
    printBanner();   
    printDetails(getOutstanding());   
} 
Void printBanner()  {  
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
}  
void printDetails (double outstanding)   {   
    System.out.println ("name: " + _name);   
    System.out.println ("amount " + outstanding);   
}

木木甫
494 声望23 粉丝

已工作的应届生。希望能和大家多多交流技术问题,