- 主题
- 0
- 积分
- 0
- 贝壳
- 0 个
- 来自
- 云南曲靖
- 注册时间
- 2006-11-19
- 最后登录
- 2006-11-19
|
JBuilder2005实现杂项重构
如果你的工程中有一个Web模块,依据你所选用的Web技术可能会有多个不同的部署描述文件,你可以直接通过这些部署描述文件进行重构类名重构,如下面是一段Struts关于FormBean的部署描述信息:
Struts有关formBean的部署描述文件
1. <struts-config>
2. <form-beans>
3. <form-bean name="untitled1ActionForm" type="myrefactor.Untitled1ActionForm" />
4. </form-beans>
5. </struts-config>
在编译器中打开需要重构的部署描述文件,将光标移到<form-bean>标签的type属性值中,点击右键->Refactoring->Rename Class for “UntitleActionForm”
在New name中键入UserActionForm,点击OK,JBuilder不但更改部署描述文件中的type属性值,还将该属性所对应的类名进行更名重构。
因为EJB设计器中知道一个EJB所有引用的类和接口,所以必须通过EJB设计器对EJB类进行更名。如果在编辑器或UML浏览器中对EJB文件进行重命名重构,你将看到以下的警告信息:
WARNING: You are refactoring an EJB file. This may require
that you change some source code and the deployment
descriptor by hand. We recommend using the EJB designer for
most refactoring scenarios.
如果你选择继续,则需要手工更改其他相关的文件,并同时更改部署描述文件中的相关内容,稍有不慎即会发生遗漏,所以应当尽量在EJB设计器中来重构。
假设一个A类有一个成员类(B类),B类有一个方法foo(),如果C类想通过A类调用B类的foo()方法,则必须这样:
A aObj = new A();
aObj.bObj.foo();
实际情况可能会有更多的衔接层,为了减少这种层层嵌套间接调用所造成臃肿的代码,有时我们直接通过代理使代码显得简洁。在A类中提供一个代理方法foo(){bObj.foo();},这样C类只要这样就可以访问B类的foo()方法了:
A aObj = new A();
aObj.foo();
JBuilder提供了一个代理成员类方法的方便功能,来看下面的MultiAnimal类:
MultiAnimal类
1. package myrefactor ;
2. public class MultiAnimal
3. {
4. Cat cat = new Cat() ;
5. Horse horse = new Horse() ;
6. }
打开MultiAnimal.java文件,Edit->Wizards->Delegate to Member...
·Select class:默认为当前打开的类。
·Select member:列出当前类所有的成员类,下拉框将有两个选项:cat:Cat及horse:Horse,我们选择cat:Cat。
·Available methods:Cat类、Cat类的父类及Cat类的接口的方法,展开myrefactor.Habitable接口,选择howl()方法。
·Visibility:设置代理方法的可视域类型,默认为Public,接受这个默认的值。
·Generate Javadoc for delegated methods:是否为这个代理方法产生Javadoc注释,接受默认的设置。
按OK后,JBuilder为MultiAnimal类生成一个代理方法,如下所示:
生成成员类代理方法
1. package myrefactor ;
2. public class MultiAnimal
3. {
4. Cat cat = new Cat() ;
5. Horse horse = new Horse() ;
6. /**
7. * Delegate method void howl() to cat : Cat
8. */
9. public void howl()
10. {
11. cat.howl() ;
12. }
13. }
此外,Edit->Wizards下还提供了其他若干个有用的功能,它们分别是:
·Add:内部类、值域、构造函数、方法、Javadoc、代码模板。
·Edit Fields/Properties:编辑值域/属性。
·Edit Javadoc:编辑Javadoc。
·Implement Interface:实现接口中的方法。
·Override Methods:覆盖父类的方法。
但除Delegate to Member向导外,其他的向导使用的机会很少,你大可用其他的方法来完成这些功能。
|
|