由于软件工程的复杂性,一个大型的软件经常被切割成不同的子软件模块,并由不同的团队承担。假设一个大型的软件分为三个子模块:
·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()); 007网络教程网 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对话框,如下图所示:
www.hot007.com
 图 30 重构历史记录
|
对话框中列出了当前工程所有重构历史记录,也许你不希望将所有的重构都分发出去,那么你可以通过Remove按钮删除那些重构记录。
为了这个方法重命名重构分发到引用了工程的其他工程中,需要在打包时包括重构的信息。
假如common_lib工程资源树中已经有了一个打包节点,仅需右击该节点在弹出菜单中选择Properties更改打包的设置即可,在弹出的Properties for ‘Archive’选择Refactoring设置页,如下图所示:
007网络教程网 图 31
|
在档案文件中包含重构记录 重新打包生成common_lib.jar档案文件,将这个档案文件覆盖<myrefactor工程目录>/extralib/common_lib.jar。
打开myrefactor.jpx工程,通过Refactor->Distributed Refactorings...打开Distributed Refactorings对话框,切换到Pending Refactorings标签页,如下图所示:
 图 32 未决的重构列表
|
由于我们在common_lib工程中对DateUtils类的getNowTime()重构为getCurrTime(),所以列表中仅中一条记录,记录简要描述了重构的变化。
文章来源于www.hot007.com
注重:
假如你在打开工程的同时覆盖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,弹出如下的对话框:
文章来源于www.jc567.cn 图 33 通过ErrorInsight进行重构修复的对话框
|
点击OK,JBuilder不但会在当前类中应用这个方法的重构,还会在查找当前工程中其他引用这getNowTime()方法的地方,一并重构。
切换到  图 32的Completed Refactorings标签页中将列出所有完成的重构项。
共2页: 上一页 1 [2] 下一页
Tags:JBuilder2005实现重构之分布式重构
您的评论
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
|