由於軟件工程的復雜性
一個大型的軟件常常被切割成不同的子軟件模塊
並由不同的團隊承擔
假設一個大型的軟件分為三個子模塊
A模塊
底層處理類模塊
B模塊
高層業務模塊
C模塊
高層業務模塊
A模塊作為底層的模塊
會被B和C模塊調用
但因為A模塊由單獨的團隊開發(在JBuilder中表現為單獨的工程)
A模塊的重構僅在當前工程中進行
JBuilder會記錄重構軌跡
並允許你通過JAR檔案包含這些重構的記錄
當B及C模塊工程通過工程類庫重新引入A的JAR檔案文件時
可以將在A工程中的重構應用於B及C模塊工程
這種重構
解決了關聯工程間的重構問題
稱為分布式重構
為了演示分布式重構
我們重新創建了一個新的工程common_lib
開發一個DateUtils類
代碼清單
DateUtils類
package common_lib;
public class DateUtils {
public static String getNowTime()
{
return
+(new java
util
Date());
}
}
將common_lib工程打成common_lib
jar包輸出
並在myrefactor工程目錄下創建一個extralib子文件夾
將common_lib
jar拷貝到這個文件夾中
在工程擴展類庫中引用這個JAR包
在myrefactor中新建一個Distribute類
引用common_lib
jar中的DateUtils
getNowTime()
其代碼如下所示
代碼清單
在myrefactor工程中引用common_lib工程的類
package myrefactor ;
import common_lib
DateUtils;
public class Distribute
{
public void printCurrTime()
{
System
out
println(DateUtils
getNowTime()) ;
}
}
過了一段時間
common_lib工程的負責人對DateUtils
getNowTime()方法名進行重構
將其更名為getCurrTime()
通過Refactor
>Refactoring History
調出Refactoring History對話框
如下圖所示
educity
cn/img_
/
/
/
jpg>
圖
重構歷史記錄
對話框中列出了當前工程所有重構歷史記錄
也許你不希望將所有的重構都分發出去
那麼你可以通過Remove按鈕刪除那些重構記錄
為了這個方法重命名重構分發到引用了工程的其他工程中
需要在打包時包括重構的信息
如果common_lib工程資源樹中已經有了一個打包節點
僅需右擊該節點在彈出菜單中選擇Properties更改打包的設置即可
在彈出的Properties for
Archive
選擇Refactoring設置頁
如下圖所示
educity
cn/img_
/
/
/
jpg>
圖
在檔案文件中包含重構記錄
重新打包生成common_lib
jar檔案文件
將這個檔案文件覆蓋<myrefactor工程目錄>/extralib/common_lib
jar
打開myrefactor
jpx工程
通過Refactor
>Distributed Refactorings
打開Distributed Refactorings對話框
切換到Pending Refactorings標簽頁
如下圖所示
educity
cn/img_
/
/
/
jpg>
圖
未決的重構列表
由於我們在common_lib工程中對DateUtils類的getNowTime()重構為getCurrTime()
所以列表中僅中一條記錄
記錄簡要描述了重構的變化
注意
如果你在打開工程的同時覆蓋common_lib
jar
Distributed Refactorings對話框的Pending Refactorings標簽頁中並不會列出未決重構項
此時
你需要關閉並重啟myrefactor
jpx工程
在列表中選擇這條未決的重構記錄
點擊Apply應用這個重構
Distribute類的調用被更改過來
代碼清單
應用分式重構後的Distribute類
…
public class Distribute
{
public void printCurrTime()
{
System
out
println(DateUtils
getCurrTime()) ;
}
}
你也可以通過ErrorInsight應用分布式的重構
在工程擴展類型被的API被更改後
引用到發生重構類的當前工程類的結構窗格會出現一個 圖標
右擊這個圖標
在彈出的菜單中選擇重構修復菜單項
如這個Distribute類
我們可以選擇Refactor Method
彈出如下的對話框
educity
cn/img_
/
/
/
jpg>
圖
通過ErrorInsight進行重構修復的對話框
點擊OK
JBuilder不但會在當前類中應用這個方法的重構
還會在查找當前工程中其他引用這getNowTime()方法的地方
一並重構
切換到
educity
cn/img_
/
/
/
jpg>
圖
的Completed Refactorings標簽頁中將列出所有完成的重構項
總結 有了重構
就應當盡量少用替換功能了
重構保證了更改的安全性和一致性
有了JBuilder重構功能的支持
對工程進行代碼重構有如行雲流水
一氣呵成
重構不是階段性的工作
當你一發現代碼隊伍陣腳不齊
或說聞到代碼的壞味道時
就應該進行重構了
即使你的工程已經被其他工程當成API使用
也不必擔心
JBuilder分布式重構的功能使開發伙伴團隊只需要少許的工作
就可以保持代碼的一致性了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26389.html