跟踪实用程序类
我最近对我在项目代码库中看到的一个问题越来越感到沮丧。
我正在开发一个大型java项目,该项目具有>1M行代码。接口和类结构设计得非常好,编写代码的工程师非常精通。问题在于,为了让代码更干净,每当人们需要重用某些功能时,他们就会编写Utility类,因此随着时间的推移,随着项目的发展,越来越多的实用程序方法出现。但是,当下一位工程师遇到对相同功能的需求时,他无法知道某人已经在代码中的某个地方实现了实用程序类(或方法),并在另一个类中实现了该功能的另一个副本。结果是大量代码重复和太多具有重叠功能的实用程序类。
作为一个团队,我们是否可以实施任何工具或任何设计原则,以防止实用程序类的重复和低可见性?
示例:工程师 A 有 3 个位置需要将 XML 转换为 String,因此他编写了一个名为 XMLUtil 的实用程序类,并在其中放置了一个静态方法。工程师 B 有几个地方可以将文档序列化为各种格式,包括 String,因此他编写了一个名为 SerializationUtil 的实用程序类,并有一个名为“字符串”的静态方法。toString(Document)
serialize(Document)
请注意,这不仅仅是代码重复,因为上面示例的2个实现很可能是不同的(假设一个使用转换器API,另一个使用Xerces2-J),所以这也可以被视为一个“最佳实践”问题......
更新:我想我最好描述一下我们当前所处的环境。我们使用Hudson进行CI,Clover用于代码覆盖率,使用Checkstyle进行静态代码分析。我们使用敏捷开发,包括日常讨论和(也许不够)代码审查。我们在 .util 中定义了所有实用程序类,由于它的大小,它现在有 13 个子包,在根 (.util) 类下大约有 60 个类。我们还使用第三方库,例如大多数apache commons jars和一些组成Guava的jar。
我很肯定,如果我们让某人重构整个软件包的任务,我们可以将实用程序的数量减少一半,我想知道是否有任何工具可以降低操作成本,以及是否有任何方法可以尽可能地延迟问题再次发生。