问题

在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 热门回答(65 赞)

像许多这样的约定一样,重要的不是你使用的约定,而是你一直使用它。就像,如果你有三个实用程序类并且你称它们为CustomerUtil,ProductUtils和StoreUtility,其他试图使用你的类的人会经常混淆并错误地键入CustomerUtils,必须查找它,诅咒你几次, (我听过一次演讲的一致性演讲,演讲者用一张幻灯片显示他演讲的轮廓,标有"1","2"和"C"三个要点。)

从来没有使两个名称只有一些微妙的拼写不同,比如拥有CustomerUtil和CustomerUtility。如果有充分的理由做两个课程,那么他们必须有一些不同的东西,这个名字至少应该让我们知道这个差异是什么。如果一个包含与名称和地址相关的实用程序函数,另一个包含与订单相关的实用程序函数,则将它们称为CustomerNameAndAddressUtil和CustomerOrderUtil或其他类似函数。当我看到名字中无意义的细微差别时,我经常发疯。就像昨天一样,我正在制定一个有三个运费成本领域的计划,名为"货运","货运成本"和"费用"。我不得不研究代码来弄清楚它们之间的区别。


#2 热门回答(24 赞)

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

对于whatMaster java API Designer Josh Bloch does(java集合以及google集合)来说,这似乎很标准

只要Helper和Util开始,当有API帮助实现包的特定功能时(考虑到实现模块的包),我会称之为Helper;意味着可以在任何上下文中调用Util。

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

帮助API的所有"帐户"特定业务规则

org.mycompany.account.AccountHelper

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


#3 热门回答(18 赞)

我喜欢当类型是接口或不能控制的类时,只在类型名称中添加"s"的约定。 JDK中的示例包括CollectionsExecutors。它也是Google Collections中使用的惯例。

当你处理aclassyou有控制权时,我会说实用程序方法一般属于类本身。


原文链接