Helper和Utility类之间有什么区别?


116

如何确定如何调用类XHelper或XUtils?

在我心里 :

Helper类,是可以实例化并完成一些业务工作的类

Utils类是一个静态类,它对一种实例执行小的重复性操作(Apache的utils类ArrayUtils或IOUtils的示例)


5
“业务工作”是此处的主要区别。我发现将Utils静态类用于组织中或组织中的任何地方都是有用的约定。甲Helper类有共同的代码,其可以被重新使用的项目中,并具有在项目中的依赖关系。当然,没有公认的规则,但是我发现这很有用。
史蒂芬·霍斯金

1
@StephenHosking您的解释对我乃至每个人都是最有说服力的。如果可能的话,您会发布您的解释作为此帖子的实际答案,而不是仅留下评论。
Bigair

@Bigair。谢谢,但是我的只是一个建议,而不是一个答案。我很高兴人们发现它很有帮助。
Stephen Hosking

Answers:


102

有很多命名样式可供使用。我建议Utils只是因为它比较常见。

Utility类应理解为仅具有静态方法并且是无状态的。您不会创建此类的实例。

Helper可以是实用程序类,也可以是有状态的,或者需要创建实例。如果可能,我会避免这种情况。

如果可以使名称更具体。例如,如果它具有排序方法,则将其命名为XSorter

对于数组,您可以找到诸如

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

顺便说一句,实用程序类的简称是一个没有实例的枚举

enum XUtils {;
    static methods here
}

如果您需要实现一个接口,我将使用无状态的Singleton。

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

我在此stackoverflow.com/a/2135797/787698中,这是Xutils是没有依赖项的静态类。你在想什么呢?
jakcam

@jakcam有趣的一点。一个助手可能是有状态的,并且需要一个实例。如果可能,我将使用无状态和无实例的实用程序类。
彼得·劳瑞

Xutils您了解什么是没有依赖项的静态类?
jakcam

我在那篇文章中找不到“ xutils”或“没有依赖项”。
彼得·劳瑞

1
@John在那种情况下,不希望使用实用程序方法,因为很难出于测试目的而将其模拟出来。
彼得·劳瑞

16

一般来说?这是完全任意的。没有任何规则。


8

实用程序是一般使用的“叶节点”类。也就是说,它与您的项目没有任何依赖性,可以在不中断或变得无用的情况下从一个项目移植到另一个项目。例如:Vector3RandomNumberGeneratorStringMatcher,等...

“帮助者”似乎是其设计旨在帮助另一类的任何类。这些可能取决于也可能不取决于您的项目。如果要创建一个GameNetworkClient类,则可以说GameNetworkConnection该类是“帮助器”,因为它“帮助”了GameNetworkClient

开发人员引用工具的方式反映了这些词的常用用法。如果您可以回忆起被描述为“有用”与“有用”的助听器,那么有用的工具往往具有一定的背景(奶酪刨丝器有助于磨碎奶酪,玉米剥皮器有助于剥皮玉米,快速装载器有助于重新装填枪支)。“实用程序”有望在多种情况下工作(WD-40,胶带,军刀,胶水,手电筒等)。


5

正如Jesper所说,这完全是任意的。您可以考虑对您的组织有效的方法,并制定该约定。

对我来说,是这样的:

utils-静态类,可以在任何地方自由移动和导入。

执行在不同模块中可能有用的常规任务。正如彼得·劳瑞(Peter Lawrey)所说,更具体的名称很有用。

帮手 -类帮助其他类或模块。

仅在其放置的模块中使用的任务,将其导入其他位置没有意义。因此,名称能更具体- 模块名助手(如AdministrationHelperLoginHelper


2

没有最终答案。找出一种命名方案并坚持下去。命名包和类是软件体系结构的重要组成部分,没有人可以放弃您的决定。

我个人更喜欢XHelper,但是在外来代码中我更经常看到XUtils。

我也喜欢在JDK和Guava中都可以找到的“多个”命名方案:

如果一个类处理Collection对象,则称为Collections

数组>数组(jdk)
列表>列表(番石榴)
映射>映射(番石榴)

等等

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.