Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
您现在的位置: 天极网 > 开发频道 > Eclipse中自动重构实现探索
全文

Eclipse中自动重构实现探索

2005-05-10 09:46 作者: 张昱 出处: blogchina 责任编辑:方舟
  四、重构第三步:提炼"常客积点计算"代码

  目的:提取"常客积点计算"代码并放在Rental类中,"常客积点计算"代码如下。

public String statement() {
 ……
 // add frequent renter points
 frequentRenterPoints ++;
 // add bouns for a two day new release rental
 if((each.getMovie().getPriceCode())==Movie.NEW_RELEASE && each.getDaysRented()>1)
  frequentRenterPoints ++;
  ……
}

  重构后的代码如下:

frequentRenterPoints += each.getFrequentRenterPoints();

  重构方法:

  Extract Method
  Move Method
  Change Method signatrue
  Inline Method

  方法:

  1、 首先,抽取代码到独立的函数中。

  用"抽取方法"重构代码,函数名:getFrequentRenterPoints。很遗憾,eclipse的不能生成诸如:frequentRenterPoints += getFrequentRenterPoints(Rental aRental); 的代码。原因是执行自增操作的局部变量frequentRenterPoints要出现在等式右边,因此抽取函数getFrequentRenterPoints()一定要把frequentRenterPoints作为参数。手工修改函数和对函数的引用,重构后的代码如下:

public String statement() {
 ……
 while(rentals.hasMoreElements()){
  ……
  frequentRenterPoints += getFrequentRenterPoints(each);
  ……
 }
 ……
}

/**
* @param each
* @return
*/
private int getFrequentRenterPoints(Rental each) {
 if((each.getMovie().getPriceCode())==Movie.NEW_RELEASE && each.getDaysRented()>1)
  return 2;
 else
  return 1;
}

  2、 把getFrequentRenterPoints()移动到Rental类中。

  3、 对getFrequentRenterPoints()"更改方法特征符"为public。

  4、 对Customer的函数getFrequentRenterPoints()执行内联操作,重构目标完成。

  五、重构第四步:去除临时变量(totalAmount和frequentRenterPoints)

  目的:去除临时变量(totalAmount和frequentRenterPoints)

  方法:

  1、 分析totalAmount和frequentRenterPoints的定义和引用结构如下:

// 声明和定义
double totalAmount = 0;
int frequentRenterPoints = 0;
……
// 在循环中修改
while(rentals.hasMoreElements()){
 ……
 frequentRenterPoints += each.getFrequentRenterPoints();
 ……
 totalAmount += each.getCharge();
 ……
}
……
// 在循环外使用
result += "Amount owed is " + String.valueOf(totalAmount) + "\n";
result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points";
……

  上述两个变量在循环体外面定义和使用,在循环中被修改,运用Replace Temp with Query方法去除这两个临时变量是一项稍微复杂的重构。很遗憾,eclipse目前不支持这样的重构。

  2、手工修改代码。

共4页。 9 1 2 3 4 :
网友关注
最新上市
编辑推荐
文章阅读排行
周排行
月排行
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml