什么是重构列表
重构方法需要以一种特定的格式记录下来。按照格式记录下来的重构方法的集合叫重构列表
重构的记录格式
每个重构手法可分为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);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。