您对如何组织和命名实用程序类有任何意见吗?
每当我遇到一些代码复制时,可能只是几个代码行,我将它们移动到实用程序类。
过了一段时间,我倾向于得到很多小的静态类,通常只有一个方法,我通常把它放在utility
命名空间中,这个命名空间会因为类而膨胀。
示例:
ParseCommaSeparatedIntegersFromString( string )
CreateCommaSeparatedStringFromIntegers( int[] )
CleanHtmlTags( string )
GetListOfIdsFromCollectionOfX( CollectionX )
CompressByteData( byte[] )
通常,命名约定会告诉您将类命名为名词。我经常会遇到很多类,例如HtmlHelper
,CompressHelper
,但它们的信息量不大。我也尝试过像HtmlTagCleaner
这样的特定内容,通常每个实用程序方法都会有一个类。
您对如何命名和分组这些辅助方法有任何想法吗?
答案 0 :(得分:17)
我相信存在一系列复杂性,因此相应的组织。示例如下,根据项目和实用程序的复杂程度进行选择,并适应其他约束:
在每个分组级别(包,类):
对于项目,我通常在超级包名称中重复常见含义。虽然在理论上不是我的首选,但我没有在我的IDE(Eclipse)中看到从哪个项目导入类,所以我需要重复这些信息。该项目实际上仅用作:
请注意,以上所有内容也适用于动态方法,不仅适用于静态方法。 这实际上是我们所有代码的良好实践。
既然我试图回答你的问题(尽管有广泛的话),让我再添加一个想法 (我知道你没有要求)。
静态方法(使用静态类成员除外)在没有上下文的情况下工作,所有数据都必须作为参数传递。我们都知道,在OO代码中,这不是首选方式。理论上,我们应该寻找与该方法最相关的对象,并在该对象上移动该方法。请记住,代码共享不必是静态的,它只需要公开(或以其他方式可见)。
移动静态方法的示例:
虽然这种方法可能看起来像OO-purist,但我们发现从长远来看这实际上对我们有所帮助(当我们想要子类化它来改变算法时它证明是无价的)。 Eclipse在不到一分钟的时间内(通过所有验证)移动一个方法,当我们查找一些代码时,或者当我们不再编码已编码的方法时,我们获得的时间超过一分钟。
限制:某些类无法扩展,通常是因为它们失控(JDK,库......)。我相信这是真正的帮助理由,当你需要在一个你无法改变的类上放一个方法。
我们的良好做法是使用Helper后缀为要使用要扩展的类的名称命名助手。 (StringHelper,DateHelper)。我们希望代码所在的类与Helper之间的这种紧密匹配有助于我们在几秒钟内找到这些方法,即使我们的项目中有其他人写过该方法也不知道。
答案 1 :(得分:8)
Helper
后缀是良好约定,因为它用于其他语言(至少在Java中,IIRC rails使用它)。
您的帮助程序的意图应该通过方法名称传输,并仅将该类用作占位符。例如,ParseCommaSeparatedIntegersFromString
是一个糟糕的名称,原因有两个:
FromString
后缀,因为它是从签名中推断的您如何看待:
CSVHelper.parse(String)
CSVHelper.create(int[])
HTMLHelper.clean(String)
...