程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JBuilder2005實現重構之分布式重構

JBuilder2005實現重構之分布式重構

編輯:關於JAVA

由於軟件工程的復雜性,一個大型的軟件常常被切割成不同的子軟件模塊,並由不同的團隊承擔。假設一個大型的軟件分為三個子模塊:

·A模塊:底層處理類模塊。

·B模塊:高層業務模塊1。

·C模塊:高層業務模塊2。

A模塊作為底層的模塊,會被B和C模塊調用,但因為A模塊由單獨的團隊開發(在JBuilder中表現為單獨的工程),A模塊的重構僅在當前工程中進行。JBuilder會記錄重構軌跡,並允許你通過JAR檔案包含這些重構的記錄,當B及C模塊工程通過工程類庫重新引入A的JAR檔案文件時,可以將在A工程中的重構應用於B及C模塊工程。這種重構,解決了關聯工程間的重構問題,稱為分布式重構。

為了演示分布式重構,我們重新創建了一個新的工程common_lib,開發一個DateUtils類:

代碼清單 21 DateUtils類

1. package common_lib;
2. public class DateUtils {
3.  public static String getNowTime()
4.  {
5.   return ""+(new Java.util.Date());
6.  }
7. }

將common_lib工程打成common_lib.jar包輸出,並在myrefactor工程目錄下創建一個extralib子文件夾,將common_lib.jar拷貝到這個文件夾中,在工程擴展類庫中引用這個JAR包。

在myrefactor中新建一個Distribute類,引用common_lib.jar中的DateUtils.getNowTime(),其代碼如下所示:

代碼清單 22 在myrefactor工程中引用common_lib工程的類

1. package myrefactor ;
2. import common_lib.DateUtils;
3. public class Distribute
4. {
5.  public void printCurrTime()
6.  {
7.   System.out.println(DateUtils.getNowTime()) ;
8.  }
9. }

過了一段時間,common_lib工程的負責人對DateUtils.getNowTime()方法名進行重構,將其更名為getCurrTime()。通過Refactor->Refactoring History...調出Refactoring History對話框,如下圖所示:

圖30 重構歷史記錄

對話框中列出了當前工程所有重構歷史記錄,也許你不希望將所有的重構都分發出去,那麼你可以通過Remove按鈕刪除那些重構記錄。

為了這個方法重命名重構分發到引用了工程的其他工程中,需要在打包時包括重構的信息。

如果common_lib工程資源樹中已經有了一個打包節點,僅需右擊該節點在彈出菜單中選擇Properties更改打包的設置即可,在彈出的Properties for ‘Archive’選擇Refactoring設置頁,如下圖所示:

圖31

在檔案文件中包含重構記錄

重新打包生成common_lib.jar檔案文件,將這個檔案文件覆蓋<myrefactor工程目錄>/extralib/common_lib.jar。

打開myrefactor.jpx工程,通過Refactor->Distributed Refactorings...打開Distributed Refactorings對話框,切換到Pending Refactorings標簽頁,如下圖所示:

圖32 未決的重構列表

由於我們在common_lib工程中對DateUtils類的getNowTime()重構為getCurrTime(),所以列表中僅中一條記錄,記錄簡要描述了重構的變化。

注意:

如果你在打開工程的同時覆蓋common_lib.jar,Distributed Refactorings對話框的Pending Refactorings標簽頁中並不會列出未決重構項,此時,你需要關閉並重啟myrefactor.jpx工程。

在列表中選擇這條未決的重構記錄,點擊Apply應用這個重構,Distribute類的調用被更改過來:

代碼清單 23 應用分式重構後的Distribute類

1. …

2. public class Distribute

3. {

4.  public void printCurrTime()

5.  {

6.   System.out.println(DateUtils.getCurrTime()) ;

7.  }

8. }

你也可以通過ErrorInsight應用分布式的重構:在工程擴展類型被的API被更改後,引用到發生重構類的當前工程類的結構窗格會出現一個圖標,右擊這個圖標,在彈出的菜單中選擇重構修復菜單項,如這個Distribute類,我們可以選擇Refactor Method,彈出如下的對話框:

圖33 通過ErrorInsight進行重構修復的對話框

點擊OK,JBuilder不但會在當前類中應用這個方法的重構,還會在查找當前工程中其他引用這getNowTime()方法的地方,一並重構。

切換到

圖32的Completed Refactorings標簽頁中將列出所有完成的重構項。

總結

有了重構,就應當盡量少用替換功能了,重構保證了更改的安全性和一致性。有了JBuilder重構功能的支持,對工程進行代碼重構有如行雲流水,一氣呵成。重構不是階段性的工作,當你一發現代碼隊伍陣腳不齊,或說聞到代碼的壞味道時,就應該進行重構了。即使你的工程已經被其他工程當成API使用,也不必擔心,JBuilder分布式重構的功能使開發伙伴團隊只需要少許的工作,就可以保持代碼的一致性了。

當然JBuilder只是提供了各種重構的操作,要知道如何通過重構優化代碼,也許你需要閱讀一些其他的書籍,本文一再提及Martin Fowler的《重構——改善既有代碼的設計》,就把這本書再向讀者朋友推薦一下吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved