Skip to content

命名

  • 基本原则:见名知意
  • 类/接口命名
    • 大驼峰式命名法,每个单词的首字母大写
    • 尽量避免缩写,除非该缩写是众所周知
java
public class SaTokenConfigure implements WebMvcConfigurer{
    
}
public class SaTokenConfigure implements WebMvcConfigurer{
    
}
  • 方法/函数命名
    • 使用动词或动名词,采用小驼峰命名法
java
public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor){

}
public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor){

}
  • 变量命名
    • 成员变量/临时变量
      • 采用小驼峰命名法
java
private PathPatternParser pathPatternParser;
private PathPatternParser pathPatternParser;
  • 常量
    • 量使用全大写字母加下划线的方式命名
    • 用final static 修饰
java
private static final Comparator<Object> INTERCEPTOR_ORDER_COMPARATOR;
private static final Comparator<Object> INTERCEPTOR_ORDER_COMPARATOR;

注释

基本原则:规范,方便文档自动化生成

  • 基本注释【必须加】
    • 注释规范
      • 强制使用文档注释 /** /,禁止使用当行注释 // 和块注释 / */
    • 范围
      • 类/接口上注释
java
/**
 * Sa-Token 常见加密算法工具类
 */
public class SaSecureUtil {

}
/**
 * Sa-Token 常见加密算法工具类
 */
public class SaSecureUtil {

}
  - 字段/属性上注释 
     - 如果为标识类字段,需写明可能值及含义
java
/**
 * 路径 
 */
private String path;

/** 
 * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal) 
 */
private int logLevelInt = 1;
/**
 * 路径 
 */
private String path;

/** 
 * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal) 
 */
private int logLevelInt = 1;
  - 方法上注释 
     - 方法用途说明
     - @params 
     - @return 
     - 其他javadoc定义的标准tag
     - smart-doc定义的tag【项目采用smart-doc】
java
/**
 * 路由匹配
 * @param pattern 路由匹配符 
 * @param path 被匹配的路由  
 * @return 是否匹配成功 
 */
public static boolean isMatch(String pattern, String path) {
    return SaManager.getSaTokenContextOrSecond().matchPath(pattern, path);
}
/**
 * 路由匹配
 * @param pattern 路由匹配符 
 * @param path 被匹配的路由  
 * @return 是否匹配成功 
 */
public static boolean isMatch(String pattern, String path) {
    return SaManager.getSaTokenContextOrSecond().matchPath(pattern, path);
}
  • 方法具体实现
    • 结合换行分段、规范命名、注释一起解释代码
    • 不建议写过多冗长代码注释

编码风格

基本原则:增加代码可读性和排错便利性

  • 建议单个函数代码尽量控制在100行内(不包含注释行)
  • 建议单个类代码尽量控制在1500行内
  • 函数实现时,建议使用一个空行来分割代码块
  • 建议操作符两端各一个空格增加代码可读性
  • 异常处理,尽量使用Assert方式
  • 异常处理,禁止“吃掉异常信息”,禁止使用printStackTrace()输出异常信息
  • 关键地方打印日志
  • 使用枚举类或常量类定义**可穷尽状态集合,**尽量避免出现“魔法值”
    • 使用静态常量
    • 使用枚举

框架使用

基本原则:理解和遵守规范,减少工作量

  • 统一使用构造函数方式(借助lombok)依赖注入
java
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class OrgApi {

	private final OrgService orgService;
	private final OrgUserService orgUserService;
	private final UserRoleService userRoleService;
	private final FileUploadService fileUploadService;
}
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class OrgApi {

	private final OrgService orgService;
	private final OrgUserService orgUserService;
	private final UserRoleService userRoleService;
	private final FileUploadService fileUploadService;
}
  • 清晰区分各层职责
    • Controller层
      • 入口点,负责接收用户的请求,并将请求转发给对应的业务逻辑处理
        • 处理用户输入的参数,进行解析、校验和转换
        • 调用Service层来处理业务逻辑
        • 负责响应结果的封装和返回
    • Service层
      • 业务逻辑处理层,负责处理业务逻辑和协调各个 Repository层的操作
        • 业务逻辑处理
        • 事务控制
        • 注意业务逻辑的封装重用和扩展性
    • Repository层
      • 数据访问层,负责与数据库或其他数据存储进行交互
        • 封装了对数据的持久化操作,包括查询、增加、修改和删除等
        • 通常提供一些接口或方法,供 Service 层调用以执行数据库操作
  • Mybatis的Mapper.xml
    • 多表操作禁止使用select *