后端开发设计规范--精华 一、设计原则 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.逻辑名Controller1、提供Web接口; 2、提供前端路由; 3、Web接口调用的权限控制 1、不做具体业务逻辑的实现; 2、实现方式为调用本模块服务层、仓库层以及领域模型层; 3、接口的输入输出类可以是基本数值类型;也可以是基于实体类的VO; 4、接口文档的依赖类可以是基于实体类的VO,也可以是本Controller的嵌入静态类 控制器内部类 com.fh.module.模块名.controller.逻辑名Controller$逻辑名Vo com.ztl.module.模块名.controller.逻辑名Controller$逻辑名Vo1、接口方法的输入参数 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$依赖类逻辑名Vo1、接口方法的输入参数 2、也可以供接口文档生成用 1、均使用lombok的@Data自动生成getter/setter,以提高代码简洁度; 2、可以供接口文档生成用;亦可以作为接口方法的输入参数; 3、可以转换成实体类VO后再调用领域 本文来源:https://www.wddqw.com/doc/40509ab8b8f3f90f76c66137ee06eff9aef849ec.html