【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《后端开发设计规范-精华》,欢迎阅读!
后端开发设计规范--精华
一、设计原则
1、模块化开发,模块与模块之间尽量独立,职责分明,需要遵循以下规范:
a、原则上不可在本模块直接实现非本模块的功能(也方便日后做系统拆分),除非有足够的理由(比如为了性能考虑实现跨模块关联查询);
b、模块与模块之间只能通过Service调用,而且输入参数只包含有用字段(方便开发人员的阅读与流程及逻辑的梳理)
2、纵向分层设计,从上到下可分为实体类、领域驱动模型、Service VO、Service、接口输入与输出VO、接口,需要遵循以下原则:
a、上层不可依赖下层;
b、下层可以依赖上层,而且尽量利用上层资源重用代码,减少代码量,提高开发效率
3、为了提供代码的可读性以及方便追溯,代码注释应遵循以下原则
a、所有类必须作功能注释,并注明作者;
b、所有属性以及方法必须作功能注释,方法内的参数必须作注释;
二、模块设计规范 设计项
实体类
后台目录
com.fh.entity.模块名.entity.表名Entity
前台目录 无
功能描述
承载数据库数据交互的载体
设计原则
1、所有字段对应的属性,必须作注释; 2、对于存在外键字段的属性,必须定义一对一的关联实体类属性; 3、均使用自动生成getter/setter等代码方式,以提高代码开发效率及可维护性;
4、对于逻辑为布尔的字段、应该定义为Boolean/boolean,而不是Integer/int; 5、对应浮动型属性,应定义为double,运算时使用MathUtils公用方法运算、以避免精度问题;
6、定义为基本数据包装类的属性,必须设默认值,比如Double、Integer、Long、Short等等包装类,版本号字段除外;
7、日期字段定义为java.lang.Date而不能定义成字符串
8、对于选项用途的字段,必须定义其对应的枚举类,而且这个枚举类应该放在该类内部
9、对于非字符串字段,不可定义为字符串
10、实体类应定义Action 11、继承自DDObject
VO
输入VO:
无 供外部或本模块1、均使用自动生成getter/setter等代码
com.fh.module.模块名.vo.逻辑名Param 输出VO
com.fh.module.模块名.vo.逻辑名Vo
调用时传输数据用
方式,以提高代码开发效率及可维护性;
1、尽量少定义VO,如Controller方法的输入和输出,尽量用实体类,而用PropertiesBuilder定义只使用到的属性,亦方便生成接口文档
领域模型基类
com.fh.module.模块名.model.逻辑名ModelBase
无 1、共用的验证逻辑
2、共用的逻辑运算逻辑 3、获取领域模型
1、方法的命名必须规范; 2、不实现除功能描述外的逻辑
领域模型(Model)
com.fh.module.模块名.model.逻辑名Model角色名
用于本模块的业务逻辑计算
1、不可继承自实体类;
2、应该把本模块继承自实体类的VO做为其成员变量;
3、传入参数为本模块继承自实体类的VO或基本类型参数;
4、只做数据运算,不做数据存储功能
Service服务层
com.fh.module.模块名.service.逻辑名Service
无 用于本模块的业务逻辑处理
1、原则上只处理流程,细节运算交给领域模型计算
接口层控制器(Controller)
com.fh.module.模块名.controller.逻辑名Controller
com.ztl.module.模块名.controller.逻辑名Controller
1、提供Web接口;
2、提供前端路由;
3、Web接口调用的权限控制
1、不做具体业务逻辑的实现; 2、实现方式为调用本模块服务层、仓库层以及领域模型层;
3、接口的输入输出类可以是基本数值类型;也可以是基于实体类的VO; 4、接口文档的依赖类可以是基于实体类的VO,也可以是本Controller的嵌入静态类
控制器内部类
com.fh.module.模块名.controller.逻辑名Controller$逻辑名Vo
com.ztl.module.模块名.controller.逻辑名Controller$逻辑名Vo
1、接口方法的输入参数 2、也可以供接口文档生成用 仅供接口文档生成用
1、均使用lombok的@Data自动生成getter/setter,以提高代码简洁度; 2、可以供接口文档生成用;亦可以作为接口方法的输入参数;
1、均使用lombok的@Data自动生成getter/setter,以提高代码简洁度; 2、供接口文档生成用;实际执行使用实体类VO;
3、其属性不写注释时,默认使用原实体类
接口文档的生成依赖类
com.fh.module.模块名.controller.逻辑名Controller$依赖类逻辑名Vo
com.ztl.module.模块名.controller.逻辑名Controller$依赖类逻辑名Vo
控制器内部VO类
com.fh.module.模块名.controller.逻辑名Controller$逻辑名Vo
com.ztl.module.模块名.controller.逻辑名Controller$依赖类逻辑名Vo
1、接口方法的输入参数 2、也可以供接口文档生成用
1、均使用lombok的@Data自动生成getter/setter,以提高代码简洁度; 2、可以供接口文档生成用;亦可以作为接口方法的输入参数;
3、可以转换成实体类VO后再调用领域
本文来源:https://www.wddqxz.cn/40509ab8b8f3f90f76c66137ee06eff9aef849ec.html