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