Java中的⼯具类究竟如何命名?
先来⼏个例⼦
JDK⾃带⼯具类
Arrays.asList();
Objects.equals();
Collections.sort();
Spring框架⼯具类
StringUtils.isEmpty();
CollectionUtils.isEmpty()
Hutool⼯具类
StrUtil.isEmpty();
CollectionUtil.isEmpty();
我们发现各组例⼦之间的命名⽅式均不⼀样,总结⼀下分为三种:
1、JDK主要以操作对象的复数形式命名
2、Spring框架的⼯具类以对象或⽤途 + Util复数⽅式命名
3、Hutool框架的⼯具类则以对象或⽤途 + Util单数⽅式命名
OK,看完上⾯的再看下我们项⽬中的⼯具类命名⽅式
StringUtil.isEmpty();
StringUtils.isEmpty();
StringKit.isEmpty();
StringHelper.isEmpty();
StringTool.isEmpty();
jdk怎么使用StringTools.isEmpty();
可以看到⼀个简单的String⼯具类就可以有这么多命名⽅式,可谓是集百家之长,相当丰富。
⼏种命名⽅式的⽐较
JDK为代表的对象复数形式
优点
简单明了,熟悉的⼈这么⽤其实蛮爽的。
缺点
容易与其他以s结尾的单词让⼈对类的作⽤产⽣误解,例如将News、Goods等pojo类跟Objects⼯具类放⼀起。是不是第⼀感觉它们是同⼀⽤途,实则不然。Spring框架为代表的对象Util复数形式
优点
能从类名上对类的⽤途进⾏划分,使⽤者不容易产⽣误解。
缺点
类命名⼀般为单数,复数命名形式会显得整体命名⽅式不⼀致。
Hutool框架为代表的对象Util单数形式
优点
能从类名上对类的⽤途进⾏划分,使⽤者不容易产⽣误解,且整体命名⽅式容易与项⽬其他类保持⼀致。
缺点
这样就OK了,再较真就没法玩了。
项⽬中的命名⽅式
此处不对项⽬中的Kit、Tool等命名做过多讨论,主要还是对主流的⼏种命名⽅式进⾏分析。
到底如何命名?
对于纯粹的⼯具类来说,⾏业中普遍还是以Util或Utils命名⽅式居多,其他命名⽅式当然也可以使⽤,包括上⾯所列举的项⽬中的⼏种命名⽅式,只是说⼤家提到Util或Utils第⼀反应都知道是⼯具类,其他的命名⽅式或许需要反应个⼏秒钟。
但是这⾥需要说⼀下Util与Helper的区别,也仅限⾃⼰的理解。
在软件架构中有个软件重⽤的概念,分为⽔平式重⽤与垂直式重⽤。
那么Util类就属于上⾯所说的⽔平式重⽤,Util类更多是对JDK提供的类进⾏封装,或者是某⼀技术框架⾃⼰提供的对框架内部其他类的使⽤封装,但是这类⼀般都具有业务、领域的⽆关性。在任何业务、领域下均可使⽤。所以既然是⼯具类⼀定保证其⽔平式重⽤这⼀特性。
Helper翻译过来助⼿/帮⼿,从字⾯意思来看,这样的类是作为辅助类来使⽤的,那么问题来了,辅助的对象是谁?那么当然是对别的类的辅助,这⾥就有个范围,哪些类可以被辅助,理论上所有类或对象如果需要都可以被辅助,但实际中更多是为了简化某⼀场景下相关类使⽤的复杂度,⽽提供了便捷的访问接⼝,形成Helper类,⽽这个场景⼀般具有业务或领域特征,所以更多体现的使⽤垂直式重⽤。
总结
我个⼈来说⽬前习惯使⽤Util单数形式命名,项⽬中的其他类均以单数形式命名,如:UserController、UserVo这样的,突然出现⼀个复数形式的类会感觉有点突兀。
没什么特殊要求或个⼈癖好的情况下,还是以Util或Utils⼤众最容易理解的⽅式进⾏命名,你说我⾮要⽤Tool命名咋的了,这么⼲也没问题,关键在于公司或团队有⼀套⾃⼰的标准就⾏,我是⼀个有代码洁癖的⼈,团队中的规范标准我都会进⾏严格统⼀,前期看似需要花费不少时间,但当内部⼤家认知能够达成⼀致时,越往后团队中⼤家⼯作的默契度越⾼,这样能最⼤程度减少沟通成本,减⼩后期的维护成本。
如果能满⾜以上需求,怎么命名真的都OK。