公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  重构之极限Rename

Rename是重构中的基本操作,随着程序结构的复杂化,简单的操作的组合也会变得非常复杂,难以进行下去。下面让我们看看一个典型的Web数据库应用常用的采用模式,结构如下:

在以上的结构中,任何一个重命名操作,将会涉及到许多方面。如现在我们需要将UserDao重命名为UserManager,那么涉及到以下方面:我们需要将UserDaoImpl更名为UserManagerImpl,接着UserDaoImplTest将更名为UserManagerImplTest,同时还需要涉及到可能的xml配置文件和TestSuite。在程序中,如果有该类型的声明语句,也应该重命名,如UserDao userDao=null;应该更改为UserManager userManager=null; 重构的设计目的是改善既有代码的质量,在这个例子中,如果不能完成以上的功能,势必会引入坏的代码,你需要进行更多的后继重构操作。

下面让我们看看在IDEA下如何完成这样操作。在IDEA其实很简单,你只需调用重构的Renmae操作即可,下面的事情IDEA会考虑的非常周到,全部帮你完成。上面的例子中,我们只需在UserDao接口上调用重命名操作,这时IDEA会给你一些提示选项:

这里,IDEA会提供几个选择:

  1. 搜索注释和字符传的值
  2. 搜索非Java文件
  3. 重命名给该类实例化的变量名
  4. 重命名继承子类的名称

这些选项可以保证你控制重命名中各种情况,你只需输入新的名称,接下来,IDEA会提示一些相关的设定,这样你就完成这个复杂的重命名操作,这个和我们前面的想法完全一样:相关的类名都发生相应的改变(层次关系)、非Java文件也进行了重构,这样一个重命名操作才是完美的,才是值得信赖的。在其他所有的IDE工具中,在处理重命名问题上,一般只会重命名类名、一些非Java文件的引用,而对类型变量名称、继承关系、相关依赖此类名的相关测试等都不加考虑,这样及时你执行Rename操作,你需要做更多的事情来去除代码重的坏问道。举一个例子来说吧,有一个类名为House,你觉得Home更适合,应该突出在人的方面考虑,在代码中有这样的一些声明语句 House myHouse=new House(); ,当你在执行House的重命名操作后,这样的语句变为: Home myHouse=new Home();,这时你是否觉得这样的语句太糟糕,变量名词不达意,这样的情形在其他工具中每天都在发生,虽然帮你完成了重命名功能,但是却引入了不良代码。然而这一切在IDEA并不会发生,IDEA会自动进行变量重命名,上述的语句自动会转换为 Home myHome=new Home();,这个才是你真正需要的。

总结:IDEA的重构采用了监听机制,你可以监听某一项重构操作,当这种操作发生时会触发相应的事件,这种机制可以让操作像链一样,让重构进行的更彻底。上个例子中,我们使用UnitTest插件,该插件就监听了重命名事件,当一个类的类名改变时,它的测试类的类名也应该跟着改变。如果你有关于重构的一些想法,希望做的更完美,监听一些基本重构操作的事件,然后自行处理一下,这会让你的代码开发更加高效。