Appearance
命名
- 基本原则:见名知意
- 类/接口命名
- 大驼峰式命名法,每个单词的首字母大写
- 尽量避免缩写,除非该缩写是众所周知
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层的操作
- Repository层
- 数据访问层,负责与数据库或其他数据存储进行交互
- 封装了对数据的持久化操作,包括查询、增加、修改和删除等
- 通常提供一些接口或方法,供 Service 层调用以执行数据库操作
- 数据访问层,负责与数据库或其他数据存储进行交互
- Controller层
- Mybatis的Mapper.xml
- 多表操作禁止使用select *