前言
- 最近在融入一个新团队,所以在团队组建过程中一些繁琐的事情我开始系统思考并做整理,由此就有这一篇文章。
- 后续还会发布团队建设的一些个人整理,以及团队项目开发过程的一些整理。
- 希望对你有所帮助。
代码编写时(Java 代码规范)
-
必须看过(大部分都是合理):阿里巴巴Java开发手册(终极版).pdf
-
业务逻辑复杂,必须在业务编写过程注释。
1、业务逻辑需编写在services层,并且注释,controller层杜绝出现业务逻辑。
2、涉及多个单元业务操作时,需要加上事务控制。 -
VO、DTO、PO选择场景(POJO 是这类的统称)
1、VO类,微服务apis项目定义为xxxParam、xxxData,微服务admin项目定义为xxxRequest,xxxResponse.
2、DTO类,定义为xxxBo。
3、PO类,定义为xxxEntity。
4、微服务apis项目,服务层杜绝出现VO类,VO类和DTO类需在controller层转换。
5、微服务admin项目,引入apis项目的VO类,杜绝直接返回给前端。
6、返回参数,杜绝直接返回DTO类和PO类。 -
微服务调用
1、微服务apis项目:
在api项目定义调用接口xxxApi,impl项目controller实现接口。
api子项目代码如下:
public interface HorsemanAuditRecordApi {
@RequestMapping(path = "/apisPlatform/horsemanAuditRecords/save")
@ApiMethod(description = "骑手审核记录写入")
BaseApiResponse saveHorsemanAuditRecord( SaveHorsemanAuditRecordParam saveHorsemanAuditRecordParam);
}
impl子项目代码如下:
@RestController
public class HorsemanAuditRecordController extends AbstracSpringCloudController implements HorsemanAuditRecordApi {
@Override
public BaseApiResponse saveHorsemanAuditRecord(@RequestBody @Validated SaveHorsemanAuditRecordParam
//TODO
}
2、微服务web项目:
在xxxCloudService中继承引入接口。代码如下
@FeignClient(value = "apis-platform-impl")
public interface HorsemanAuditRecordsCloudService extends HorsemanAuditRecordApi {
}
-
异常的处理原则
框架已经封装了异常捕获,需要注意如下:
1、微服务apis项目:
controller层需继承AbstracSpringCloudController类。
如果有自定义的异常类,需要在子项目api中定义,方便第三方服务引用。
2、微服务admin项目:
controller层需继承AbstractApiController。 -
日志输出,额外要有输出 JSON 格式的版本
在一些调试重要地方的方法入参、API 返回结果上要有 logger输出,方便开发初期做调试,杜绝system.out.println()打印语句出现。
前后端对接
- 对接步骤
1、后端开发人员在yapi定义接口,包括接口url、接口入参、接口出参。
2、前端开发人员在yapi确认接口,主要确认是否缺少接口定义、是否缺少接口出入参数。
3、前后端开发人员对照yapi正确的接口各自进行开发。
4、开发完成后,再进行联调,如果接口有变动,需要先更改yapi相应接口。 - 前端请求方式
查询:get请求
新增、修改:post请求
数据库规范
- INNODB 存储引擎
区分大小写配置:lower_case_table_names - 必要字段,表ID,创建人ID,创建时间、更新人ID、更新时间、备注。
- 表字符集使用 UTF8MB4
- 所有表和列都需要添加注释
- 数据库字段命名,统一用含有下划线的方式,一定不要有单独的单词:
比如 name,title,要改为:sys_name,nav_title,避免出现有些保留字或是不好统一的问题。 - 索引的数量要控制:
单张表中索引数量最好不超过 5 个
单个索引中的字段数最好不超过 5 个
命名规范
- 类名
类名往往用不同的后缀表达额外的意思,如下表:
后缀名 | 说明 | 例子 |
---|---|---|
Entity | 数据库表持久化对象 | HorsemanInfosEntity |
Param | 微服务apis项目接口入参类 | FindHorsemanParam |
Data | 微服务apis项目接口出参类 | FindHorsemansData |
Request | 微服务web项目接口入参类 | FindHorsemanRequest |
Response | 微服务web项目接口出参类 | FindHorsemansResponse |
Controller | 控制类 | ShopInfosRestController |
Service | 表明这个类是个服务类(一般用于bo层接口),里面包含了给其他类提同业务服务的方法 | PaymentOrderService |
Impl | 这个类是一个实现类,而不是接口 | HorsemanAuditRecordsService |
Inter | 这个类是一个接口 | LifeCycleInter |
Dao | 这个类封装了数据访问方法 | PaymentOrderDao |
Inter | 这个类是一个接口 | LifeCycleInter |
Action | 直接处理页面请求,管理页面逻辑了类 | UpdateOrderListAction |
Listener | 响应某种事件的类 | PaymentSuccessListener |
Event | 这个类是一个接口 | LifeCycleInter |
Inter | 这个类代表了某种事件 | PaymentSuccessEvent |
Factory | 生成某种对象工厂的类 | PaymentOrderFactory |
Adapter | 用来连接某种以前不被支持的对象的类 | DatabaseLogAdapter |
Job | 某种按时间运行的任务 | PaymentOrderCancelJob |
Wrapper | 这是一个包装类,为了给某个类提供没有的能力 | SelectableOrderListWrapper |
- 方法名
方法名往往用不同的前缀表达额外的意思,如下表:
前缀名 | 说明 | 例子 |
---|---|---|
find | 查找对象 | findNewSupplier() |
list | 查找集合 | listNewSupplier() |
create/add/save | 创建 | createOrder() |
delete/remove | 删除 | deleteOrder() |
init/initialize | 初始化 | initOrderInfo() |
destroy | 销毁 | destroyObjectPool() |
open | 打开 | openConnection() |
close | 关闭 | closeConnection() |
read | 读取 | readUserName() |
write | 写入 | writeUserName() |
prepare | 准备 | prepareOrderList() |
copy | 复制 | copyCustomerList() |
modity/update/edit | 修改 | modifyActualTotalAmount() |
calculate | 数值计算 | calculateCommission() |