Bean Java 开发一般规范 (最小规范)
1. 命名
1.1 [强制]
常量使用大写字母开头,包含拉丁字母、阿拉伯数字、下划线。
e.g Config.SystemName, Red.VersionV1, Kuma.SYSTEM_PATH
1.2 [强制]
变量、字段、方法、参数使用拉丁字母、阿拉伯数字命名。
- 使用小写字母开头,小驼峰命名法。
[建议]
非特殊情况,一般不使用下划线命名法。[建议]
单词一般使用英文单词,特殊情况下可使用少量其他语系单词。
1.3 [强制]
类、接口、注解、枚举等类型使用拉丁字母、阿拉伯数字命名,以大写字母开头,单词之间使用驼峰命名法连接。
1.4 [建议]
命名不要嫌长,而应该以人为本,可读性优先,确保语义清晰。
2. 可读性
2.1 [强制]
不要省略this, 类命名空间(类名)
2.2 [强制]
非必要或超长,不要用缩写。
2.3 [强制]
非临时变量不能使用单字母变量、枚举号变量。(如: t、 i、 t1、 t2等)
3. 架构学
3.1 [强制]
类设计面向抽象,非特殊情况原则上都必须有上层接口。
3.2 [强制]
基本亲缘架构设计
- 顶级接口: 通用名 (如 Map)
- 子接口: 前面加修饰 (如 MemoryMap)
- 典型实现类: Arch开头 (如 ArchMemoryMap)
- 一般抽象: Abstract开头 (如 AbstractMap)
- 一般类: Generic开头 (如 GenericHashMap)
- 注:直接HashMap并不推荐,对于规模很大的项目而言,HashMap也可以有多种实现(如开地址法、块式冲突法等),下级算法和架构很多,HashMap更因该是子接口或全局专门的HashMap(JDK HashMap)。
- 良好的一般命名法应该是:RBHashMap (红黑树、链表冲突法)、BlockHashMap (类似Go HMap的块式冲突法)、MergeHashMap(分治式多桶冲突法)等。
- 本地类: Local开头 (如 LocalHashMap)
- 远程类: Remote开头或专门开头 (如 RemoteHashMap, RedisHashMap)
3.3 [强制]
复用架构学
- 面向抽象而不是具体。
- 注:如定义变量时除局部场景外,不要无脑使用具体类而应该根据情况按
顶级接口 -> 下级接口 -> 典型类 ->具体类
的顺序。(如: Map xxx = new HashMap()) - 注:同理自己写类时,也应该按这个顺序根据情况把类抽象化。
3.4 [强制]
一致性架构学
- 惯用系统命名法,而不是随意命名,确保全局一致性。
- 注:如表中的栏名、表名应该与代码中变量一致。(如group_name => groupName)
- 注:系统命名法:保证命名空间、包名、路径一致性。(如/p1/p2/p3 => p1.p2.p3)
- 注:名称应该确保语义完整性、一致性、精确、信达雅而不是随意。(如: archetype 和 prototype都有原型的含义,而在
典型
上下文下archetype具有典型
含义此时应该使用它而不是prototype )
- 血缘性,命名、类设计、表设计应该确保数据流加工的明确性、可视性、白盒性、亲缘性。
- 注:如功能共享、关联的类不要乱丢乱扔,而应该放在一个目录下。
- 注:类名Connector隶属于Hydra子项目而全局有多个Connector,虽然Java有包名确保语法上无冲突,但是以人为本此时应该命名为HydraConnector.
4. 一般性
4.1 [强制]
禁用Lombok, @Getter, @Setter 这类工具,保持良好代码移植能力、可读性、维护性、等未预料的private、protect暴露等错误。所有的getter, setter应该显式给出。
4.2 [强制]
为了防止非计划地导入类和方法,禁止使用*进行批量导入,所有的导入必须显式声明。
4.3 [强制]
对于欲被忽略的异常使用显式的 ignore、impossible、expected 等明确表示指代。
try {
...
}
catch( XXXException ignore ) {
//Just ignore them.
}
4.4 [强制]
不要省略 @Override 这类辅助注解。
5. 表名
使用下划线命名法、全部拉丁字母小写。
Author:undefined Create time:2024-08-16 10:33
Last editor:undefined Update time:2024-09-26 13:40
Last editor:undefined Update time:2024-09-26 13:40