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