智库房
web -> service(common)
service -> manager(dao,common)
manager -> dao(common)
dao -> common
controller层对外提供http接口(给前端页面调用),service层对内提供dubbo服务(给其它业务模块微服务调用)
controller层不要处理业务逻辑,直接对service层进行封装,底层切面对service进行统一异常处理
在service层中实现主要业务逻辑
service层之间不要相互调用(共通的逻辑封装到manager层,再由service层调用)
多业务模块之间调用,由被调用模块在manager层封装相应方法,再由其它模块在service层进行调用
直接运行web层下面App入口类
1. dao层test下的目录com.satd.cloud.demo.dao,其中Config为配置、CodeGenerator为dao代码生成
2. 运行CodeGenerator中main方法即可生成到层代码(运行时注意指定workspace为当前dao层module,不是跟目录)
mybatis-flex文档地址【https://mybatis-flex.com/zh/intro/what-is-mybatisflex.html】
接口入参使用对象封装,入参对象只能有一个或0个,接口方法入参需添加@RequestBody注解(Controller中添加),如有字段校验则需添加@Valid注解(可在service-api中添加,或service实现中添加,推荐在前者添加)
接口出参使用Result<T>,PageResult<T>等泛型封装,无出参返回Result<Void>
PageResult中的data,无结果返回空list,尽量不要返回null,容易让前端报错
不同接口的参数实体类、同接口的入参和出参实体类,尽量不要共用(除非业务场景完全一致),实体类需完美体现接口入参和出参
接口使用实体统一包含以下lombok注解【@Data】【@FieldDefaults(level = AccessLevel.PRIVATE)】
安装alibaba java代码检查插件,实时提示代码规范问题
接口的结构全部在service层中定义,web层只做controller封装
业务接口请求统一为POST类型
接口请求路径尽量简要明了,如下
列表: /api/xxx/list
新增: /api/xxx/add
更新: /api/xxx/update
保存(兼容新增和更新): /api/xxx/save
获取单个信息: /api/xxx/get
数据多个状态变更,不要笼统使用更新接口,单独封装成多个接口,方便权限控制,更新接口只变更基本信息
出参中日期时间字段,统一用Date或Long时间戳,不要提供格式化日期时间字符串,格式化展示由前端处理
采用master、develop分支维护
1. 开发阶段,使用develop分支,版本指定【x.y.z-SNAPSHOT】,开发过程中可重复deploy到阿里云snapshot仓库
2. 开发调试结束,将版本改为【x.y.z】,并将代码合并到master分支,通过aliyun云效或者jenkins将master代码deploy到阿里云release仓库
3. 新需求开发,develop分支,将版本升级,并加上SNAPSHOT【x.y.z2-SNAPSHOT】进行开发,重复步骤1、2
tips:
【x.y.z-SNAPSHOT】snapshot版本可以重复推送,方便开发调试
【x.y.z】release版本不能重复推送,保证调用方稳定,有变动必须升级版本
无需接口文档,直接参考对应业务模块的api,如cloud-demo-service-api
使用hutool中现有的工具类,尽量不要重复造轮子
文档地址【https://www.hutool.cn/docs/】
ajax请求
loading控制,在调用前设置loading=true,在finally中loading=false
异常提示,接口result.success为false时,$message.error提示result.message信息
分页字段固定为,pageNum、pageSize,前端全局配置统一指定
新增页面【https://doc.vvbin.cn/guide/router.html#新增路由】
下拉框初始值设置成undefined,不要设置成null,注意区别
待完善