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

Java中实用程序类的命名约定,java,naming-conventions,Java,Naming Conventions,在用Java编写实用程序类时,有哪些好的指导原则可以遵循 包应该是“util”还是“utils”?是ClassUtil还是ClassUtils?什么时候是a类“助手”或“实用工具”?公用事业还是公用事业?或者你使用它们的混合物 标准Java库使用UTIL和实用程序: javax.swing.Utilities javax.print.attribute.AttributeSuite javax.swing.plaf.basic.BasicGraphicsUtils Apache使用了各种Ut

在用Java编写实用程序类时,有哪些好的指导原则可以遵循

包应该是“util”还是“utils”?是ClassUtil还是ClassUtils?什么时候是a类“助手”或“实用工具”?公用事业还是公用事业?或者你使用它们的混合物

标准Java库使用UTIL和实用程序:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSuite
  • javax.swing.plaf.basic.BasicGraphicsUtils
Apache使用了各种Util和Util,尽管它们主要是Util:

  • 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.numberrutils

那么,如何命名实用程序类呢?

我认为“utils”应该是包名。类名应该指定其中逻辑的用途。添加sufix-util是多余的

我很确定“助手”和“实用工具”是可以互换使用的。无论如何,根据您提供的示例判断,我会说,如果您的类名是一个缩写(或者其中有类似“DomUtil”的缩写),那么将您的包称为“whatever.WhateverUtil”(如果包中有多个实用程序,则称为Utils)。否则,如果它有一个全名而不是缩写,那么就叫它“whatever.WhateverUtilities”


这真的取决于你,但只要程序员知道你在说什么,你就可以走了。但是,如果你是作为一项职业为某人做这项工作,在接受我的建议之前,先问问他们的编码标准是什么。无论发生什么,都要遵守商店的标准,因为这将有助于你保住工作。:-)

我喜欢这样一种惯例,即当类型是一个接口或一个不受控制的类时,只在类型名中添加“s”。JDK中的示例包括
集合
执行者
。这也是谷歌收藏中使用的惯例


当你处理一个你可以控制的类时,我认为实用方法通常属于类本身。

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


永远不要让两个名字只在拼写上有细微的差别,比如CustomerUtil和CustomerUtility。如果有理由创建两个类,那么它们一定有不同之处,名称至少应该给我们一个线索,说明区别是什么。如果其中一个包含与名称相关的实用函数address和另一个包含与订单相关的实用函数,然后称它们为CustomerMeansandDressUtil和CustomerOrderRutil或其他类似的函数。当我看到名称之间毫无意义的细微差别时,我经常会发疯。就像昨天我在做一个程序,该程序有三个运费字段,分别是“运费”、“运费成本”和“运费成本”“fRight”。我必须研究代码以找出它们之间的区别。

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

这似乎是什么的标准(java集合和google集合)

只要Helper和Util继续运行,当它有帮助实现包的特定功能的api时(将包视为实现模块),我将调用Helper;这意味着可以在任何上下文中调用Util

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

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

org.mycompany.account.AccountHelper

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

Google Guava也使用这种模式,第4位是IV:-)--但是运费、运费和运费之间有什么区别呢?@KayMagnus,那篇文章发表于一年前,但我记得,其中一个是记录在案的当前运费,在更改订单内容之前,因此可能是运费;另一个是从表中提取的标准运费;第三个是c在一些特殊情况下使用的计算成本,比如海外运输。比如,为什么他们不能至少称呼他们,比如说“currFreight”、“stdFreight”和“calcFreight”“。这至少会给出一个结论。好的,谢谢你的解释:-)一个有趣的奇怪的代码示例,我认为这似乎是合理的,那个助手将比UTIL更具体。是的,我喜欢这种方法,它更符合逻辑。链接断开了。我发现了。在一种方法中,这不是正确的做法。@jpangamarca您链接的文章在“按功能打包”的示例中有一个“util”包。我认为在实践中,某种类型的util特性/层通常是不可避免的。
tld.organization.app.util
包不应该存在(可以,但不应该存在),任何数量的
tld.organization.app.feature.util
包都是完美的。