美文网首页
编码规范性定义分享

编码规范性定义分享

作者: _Rondo | 来源:发表于2023-11-12 03:20 被阅读0次

1、编程规范

本篇规范基于阿里巴巴、华为的开发手册,在此之上进行归纳整理,欢迎共同改进该规范。

1.1、命名规范

命名的关键是能准确达意 ,减少不必要的英文缩写,拼音简写

  • 项目命名:全部小写,多个单词以中划线分隔;
  • 类命名:驼峰命名,首字母大写;
  • 方法命名:驼峰命名;
  • 变量命名:局部变量采取驼峰命名,全局及常量全部大写,多个单词以下划线分隔;
1.2、缩进规范

使用两个空格、或一个tab键进行缩进 。

1.3、方法传参规范

一个方法参数不超过3个参数,超过3个需要构建javabean实体进行传输。

1.4、注释规范
  • TODO/FIXME:用来描述待改进和已知缺陷,格式应保持一致
// TODO @auther: 处理xx
// FIXME @auther: xx缺陷
  • 类注释需要包含作者、时间、和描述信息
/**
* @auther admin
* @date 2022-04-22 14:05:00
* @description 集合工具类
*/
public class CollectionUtils{
}
  • 方法注释需要简述方法作用,参数、返回值
/**
* 通过登录token获取用户
* @param token 登录后返回的token
* @return Principal 返回登录后的完整用户信息
*/
public Principal getPrincipal(String token) {
}
  • 代码间禁止使用尾注释,对于复杂逻辑需要做分隔
public void login(LoginDto dto) {
    /*-------------------------1、token是否存在--------------------------*/
    do something
    /*-------------------------2、token有效性验证------------------------*/
    do something
    /*-------------------------3、tokens刷新----------------------------*/
    do something    
}

2、MVC规范

2.1、整体分层
  • controller 层
  • service 层
  • mapper 层
2.2、controller规范
  • requestMapping应写在方法上,方法上的mapping可以一次取出;
  • 正例:
@RestController
public class UserController {

    @GetMapping("/api/user/list")
    public R<List<UserrVO>> list() {
        return userService.list();
    }
}
  • 反例:
@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping("/list")
    public R<List<UserrVO>> list() {
        return userService.list();
    }
}
  • 使用restful进行api构建,增删改查对应的方法操作为post、delete、put、get;
  • controller层不应出现主体逻辑,只处理参数检验、请求的分发、委派和结果响应。
2.3、service规范
  • 过于庞大的service需要进行拆分,按照功能职责进行区分,例如:UserService中与登录用户相关的部分可以拆分为处理登录用户业务的LoginUserService和用于用户管理的UserService;
  • service应该具有较好的逻辑分层,理想情况下对于产品只进行迭代,对于客开只进行拓展,在功能研发时需要对技术方案进行评审,防止相关逻辑界限不明、过分耦合;
  • 使用声明式事务 @Transaction时 需要指定rollbackFor,声明事务的方法调用另一个事务方法时,启动类需要开启@EnableAspectJAutoProxy(exposeProxy = true),同时方法内使用代理类使事务生效
 UserService userService = (UserService)AopContext.currentProxy();
2.4、mapper规范
  • 查询中不建议使用 * 代替所有字段查询
  • 3表及以上关联查询需要在xml中编写
  • 不建议使用注解型sql
  • sql中禁止使用写死的常量作为条件

3、表设计规范

良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计schema。

3.1、基本类型选取
  • 时间类型:yyyyMMddHHmmss 时间存储使用datetime,如果只是 HHmmss 使用time存储;
  • 主键:使用数值型列作为主键,不建议使用字符型列;
  • 字符型:可空长度不确定场景使用可变长的varchar进行存储 ,不为空长度固定使用char进行存储。
3.2、表命名

命名全部小写,以下划线 _ 进行分隔,使用两表名连接表示两表间关系。

//用户表
create table sys_user();
//角色表
create table sys_role();
//用户角色表
create table sys_user_role();
3.3、枚举

使用枚举类表字段注释需要将所有枚举含义进行注释。

3.4、索引建立
  • 普通索引:不使用物理外键构建表间关系,通过查询时建立的普通索引构建逻辑关系;
  • 唯一索引:具有唯一性的列构建唯一索引,减少逻辑代码;
  • 联合索引:对于多个业务场景下经常使用的多条件查询构建联合索引,最左列离散度最高;
3.5、范式和反范式
  • 范式操作多建立于写多的场景,
  • 反范式操作(冗余设计)多建立于读多的场景。
3.6、优化
  • 设计表时区分记录表与关系表,关系型的表可以多使用缓存进行查询优化

相关文章

网友评论

      本文标题:编码规范性定义分享

      本文链接:https://www.haomeiwen.com/subject/rfmlwdtx.html