lud*_*d0h 10 java language-agnostic reflection refactoring
Java Reflection提供了一种在运行时对Object进行内省的机制.没有第二个想法,这是一个很棒的功能,但它打破了所有的重构惯例!
File Search即使在现代IDE中也没有简单的方法(除了)以了解哪个属性被引用以及在哪里.这使得Refactorings变得更加复杂(令人厌烦!)并且容易出错.
坦率地说,不只是Reflection API; Hibernate mapping files (hbm.xml)并且JSP files都将属性称为String,当您重构属性名称时,您必须手动更改所有这些位置.
更糟糕的是,Hibernate映射文件或JSP文件中的更改会导致运行时错误.
我很想知道其他程序员如何在Java中处理这个问题.有一些工具吗?我使用Eclipse/IBM RAD作为主要开发平台.通常我们使用a constant来定义属性并尽可能地使用它,但它并不总是可行的.
我也很感兴趣其他语言如何处理这个问题!
Java反射会导致许多与动态类型语言(如Python和Ruby)相同的问题.事实上,考虑动态类型语言的一种方法是使用反射调用所有内容,并且语言只为反射提供了一个漂亮,干净的语法.
是的,使用动态类型语言(或反射的大量使用),重构很难.您没有获得良好的Eclipse重构功能.相反,grep成为你的朋友.
根据我的经验,你能做的最好的事情就是建立一个良好的单元测试安全网.这样,如果你在重构期间破坏了一些动态代码,至少在运行测试时你会很快发现它.
如果你正在做很多静态类型的代码,那么如果你没有良好的单元测试基础,你就会遇到大麻烦.如果你正在做很多动态类型的代码(包括带有大量反射的代码),没有良好的单元测试基础,你就没有希望成功.