Welcome

首页 / 软件开发 / JAVA / JBuilder2005实现重构之分布式重构

JBuilder2005实现重构之分布式重构2010-03-20由于软件工程的复杂性,一个大型的软件常常被切割成不同的子软件模块,并由不同的团队承担。假设一个大型的软件分为三个子模块:

·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