Java 中实用程序类的命名约定

2022-08-31 08:12:03

在用Java编写实用程序类时,有哪些好的准则需要遵循?

包装应该“util”还是“utils”?是 ClassUtil 还是 ClassUtils?类何时是“助手”或“实用工具”?实用程序还是实用程序?还是使用它们的混合物?

标准 Java 库同时使用 Utils 和 Utilities:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities
  • javax.swing.plaf.basic.BasicGraphicsUtils

Apache使用各种Util和Utils,尽管主要是Utils:

  • org.apache.commons.modeler.util.DomUtil
  • org.apache.commons.modeler.util.IntrospectionUtils
  • org.apache.commons.io.FileSystemUtils
  • org.apache.lucene.wordnet.AnalyzerUtil
  • org.apache.lucene.util.ArrayUtil
  • org.apache.lucene.xmlparser.DOMUtils

Spring使用了很多Helper和Utils类:

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

那么,如何命名效用类呢?


答案 1

像许多这样的约定一样,重要的不是你使用什么约定,而是你始终如一地使用它。例如,如果你有三个实用程序类,你称它们为 CustomerUtil、ProductUtils 和 StoreUtility,那么其他尝试使用你的类的人会不断感到困惑,并错误地键入 CustomerUtils,不得不查找它,诅咒你几次,等等(我曾经听过一个关于一致性的讲座,演讲者放了一张幻灯片,上面有三个主要点, 标记为“1”、“2nd”和“C”。

永远不要做两个名字,它们只是在拼写的一些微妙之处上有所不同,比如有一个 CustomerUtil 和一个 CustomerUtility。如果有充分的理由来制作两个类,那么它们一定有不同之处,而名称至少应该给我们一个线索,说明这种区别是什么。如果一个包含与名称和地址相关的实用程序函数,而另一个包含与订单相关的实用程序函数,则将它们称为 CustomerNameAndAddressUtil 和 CustomerOrderUtil 或类似名称。当我看到名字中毫无意义的微妙差异时,我经常发疯。就像昨天一样,我正在开发一个项目,该计划有三个运费字段,分别名为“货运”,“货运成本”和“frght”。我必须研究代码才能弄清楚它们之间的区别是什么。


答案 2

在Java世界中没有标准的规则/约定。但是,我更喜欢在类名的末尾添加“s”,正如@colinD所提到的。

这似乎与Master java API Designer Josh Bloch所做的(java集合以及Google集合)的标准相当。

只要 Helper 和 Util 继续,当它具有有助于实现包的特定功能的 API 时,我会将其称为 Helper(将包视为实现模块);意味着,而可以在任何上下文中调用 Util。

例如,在与银行帐户相关的应用程序中,所有特定于数字的实用程序静态 API 都将转到org.mycompany.util.Numbers

所有“帐户”特定业务规则帮助 API 将转到

org.mycompany.account.AccountHelper

毕竟,这是一个提供更好的文档和更干净的代码的问题。