- 5
- 0
- 约7.42万字
- 约 87页
- 2018-08-20 发布于江苏
- 举报
第1章重构,第一案例1
第1章 重构, 第一个案例1
重构, 第一个案例Refactoring, a First Example
我该怎么开始介绍重构(refactoring)呢?按照传统作法,一开始介绍某个东西时,首先应该大致讲讲它的历史、主要原理等等。可是每当有人在会场上介绍这些东西,总是诱发我的瞌睡虫。我的思绪开始游荡,我的眼神开始迷离,直到他或她拿出实例,我才能够提起精神。实例之所以可以拯救我于太虚之中,因为它让我看见事情的真正行进。谈原理,很容易流于泛泛,又很难说明如何实际应用。给出一个实例,却可以帮助我把事情认识清楚。
所以我决定以一个实例作为本书起点。在此过程中我将告诉你很多重构原理,并且让你对重构过程有一点感觉。然后我才能向你提供普通惯见的原理介绍。
但是,面对这个介绍性实例,我遇到了一个大问题。如果我选择一个大型程序,对程序自身的描述和对重构过程的描述就太复杂了,任何读者都将无法掌握(我试了一下,哪怕稍微复杂一点的例子都会超过100页)。如果我选择一个够小以至于容易理解的程序,又恐怕看不出重构的价值。
和任何想要介绍「应用于真实世界中的有用技术」的人一样,我陷入了一个十分典型的两难困境。我将带引你看看如何在一个我所选择的小程序中进行重构,然而坦白说,那个程序的规模根本不值得我们那么做。但是如果我给你看的代码是大系统的一部分,重构技术很快就变得重要起来。所以请你一边观赏这个小例子,一边想象它身处于一个大得多的系统。
1.1起点
实例非常简单。这是一个影片出租店用的程序,计算每一位顾客的消费金额并打印报表(statement)。操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用,还要为常客计算点数;点数会随着「租片种类是否为新片」而有不同。
我以数个classes表现这个例子中的元素。图1.1是一张UML class diagram(类图),用以显示这些classes。我会逐一列出这些classes的代码。
图1.1 本例一开始的各个classes。此图只显示最重要的特性。图中所用符号是UML(Unified Modeling Language,统一建模语言,[Fowler, UML])。
Movie(影片)
Movie只是一个简单的data class(纯数据类)。
public class Movie {
public static final int CHILDRENS = 2;
public static final int REGULAR = 0;
public static final int NEW_RELEASE = 1;
private String _title; // 名称
private int _priceCode; // 价格(代号)
public Movie(String title, int priceCode){
_title = title;
_priceCode = priceCode;
}
public int getPriceCode(){
return _priceCode;
}
public void setPriceCode(int arg){
_priceCode = arg;
}
public String getTitle(){
return _title;
}
}
Rental(租赁)
Rental class表示「某个顾客租了一部影片」。
class Rental {
private Movie _movie; // 影片
private int _daysRented; // 租期
public Rental(Movie movie, int daysRented) {
_movie = movie;
_daysRented = daysRented;
}
public int getDaysRented() {
return _daysRented;
}
public Movie getMovie() {
return _movie;
}
}
译注:中文版(本书)支持网站提供本章重构过程中的各阶段完整代码(共分七个阶段),并含测试。网址见于封底。
Customer(顾客)
Customer class用来表示顾客。就像其它classes一样,它也拥有数据和相应的访问函数(accessor):
class Customer {
private String _name; // 姓名
privat
您可能关注的文档
- 笑的技巧-微笑服的魅力.ppt
- 笔刷制作教程:如制作出霜冻效果的笔刷.docx
- 笔记本电脑键盘解(手感是最重要的!).doc
- 童装选择中妈妈所知道的事儿.docx
- 第 12 章 外特许授权管理.ppt
- 第 5 章 微积分问题地计算机求解.ppt
- 第 十一讲 公共系的专项活动.ppt
- 第01章、使用等类和边界值方法设计测试用例.ppt
- 第02章 单片机入输出端口.ppt
- 第03-1章. 0868088微处理器及其系统.ppt
- 宣贯培训(2026年)《NYT 4512-2025 非洲菊疫病抗性鉴定技术规程》.pptx
- 宣贯培训(2026年)《NYT 4514-2025木薯副产物综合利用导则》.pptx
- 宣贯培训(2026年)《NYT 4513-2025木薯全程机械化生产技术规范》.pptx
- 宣贯培训(2026年)《NYT 4470-2025全株玉米青贮质量分级》.pptx
- 宣贯培训(2026年)《NYT 4468-2025玉米供需平衡表编制规范》.pptx
- 宣贯培训(2026年)《NYT 4469-2025全株玉米青贮质量评定 综合指数法》.pptx
- 宣贯培训(2026年)《NYT 4474-2025东北地区玉米-大豆轮作生产技术规程》.pptx
- 宣贯培训(2026年)《NYT 4472-2025玉米耐盐碱鉴定评价技术规程》.pptx
- 宣贯培训(2026年)《NYT 4473-2025玉米抗旱性鉴定评价技术规程》.pptx
- 宣贯培训(2026年)《NYT 4478-2025甘薯收获技术规程》.pptx
原创力文档

文档评论(0)