Bean Java 开发一般规范 (最小规范)

1. 命名

1.1 [强制] 常量使用大写字母开头,包含拉丁字母、阿拉伯数字、下划线。
e.g Config.SystemName, Red.VersionV1, Kuma.SYSTEM_PATH

1.2 [强制] 变量、字段、方法、参数使用拉丁字母、阿拉伯数字命名。

  1. 使用小写字母开头,小驼峰命名法。
  2. [建议] 非特殊情况,一般不使用下划线命名法。
  3. [建议] 单词一般使用英文单词,特殊情况下可使用少量其他语系单词。

1.3 [强制] 类、接口、注解、枚举等类型使用拉丁字母、阿拉伯数字命名,以大写字母开头,单词之间使用驼峰命名法连接。

1.4 [建议] 命名不要嫌长,而应该以人为本,可读性优先,确保语义清晰。

2. 可读性

2.1 [强制] 不要省略this, 类命名空间(类名)
2.2 [强制] 非必要或超长,不要用缩写。
2.3 [强制] 非临时变量不能使用单字母变量、枚举号变量。(如: t、 i、 t1、 t2等)

3. 架构学

3.1 [强制] 类设计面向抽象,非特殊情况原则上都必须有上层接口。
3.2 [强制] 基本亲缘架构设计

  1. 顶级接口: 通用名 (如 Map)
  2. 子接口: 前面加修饰 (如 MemoryMap)
  3. 典型实现类: Arch开头 (如 ArchMemoryMap)
  4. 一般抽象: Abstract开头 (如 AbstractMap)
  5. 一般类: Generic开头 (如 GenericHashMap)
  • 注:直接HashMap并不推荐,对于规模很大的项目而言,HashMap也可以有多种实现(如开地址法、块式冲突法等),下级算法和架构很多,HashMap更因该是子接口或全局专门的HashMap(JDK HashMap)。
  • 良好的一般命名法应该是:RBHashMap (红黑树、链表冲突法)、BlockHashMap (类似Go HMap的块式冲突法)、MergeHashMap(分治式多桶冲突法)等。
  1. 本地类: Local开头 (如 LocalHashMap)
  2. 远程类: Remote开头或专门开头 (如 RemoteHashMap, RedisHashMap)

3.3 [强制] 复用架构学

  1. 面向抽象而不是具体。
  • 注:如定义变量时除局部场景外,不要无脑使用具体类而应该根据情况按顶级接口 -> 下级接口 -> 典型类 ->具体类的顺序。(如: Map xxx = new HashMap())
  • 注:同理自己写类时,也应该按这个顺序根据情况把类抽象化。

3.4 [强制] 一致性架构学

  1. 惯用系统命名法,而不是随意命名,确保全局一致性。
  • 注:如表中的栏名、表名应该与代码中变量一致。(如group_name => groupName)
  • 注:系统命名法:保证命名空间、包名、路径一致性。(如/p1/p2/p3 => p1.p2.p3)
  • 注:名称应该确保语义完整性、一致性、精确、信达雅而不是随意。(如: archetype 和 prototype都有原型的含义,而在典型上下文下archetype具有典型含义此时应该使用它而不是prototype )
  1. 血缘性,命名、类设计、表设计应该确保数据流加工的明确性、可视性、白盒性、亲缘性。
  • 注:如功能共享、关联的类不要乱丢乱扔,而应该放在一个目录下。
  • 注:类名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