# 模块说明 1. 除support\config\filter,其余各包为各具体业务模块包 # 结构规则 1. 新增功能规则:如果与现有模块不存在关联,则直接扩充新模块;否则,结合具体业务情形,选择新增模块或者扩充某模块 2. 模块扩充规则:尽量保持当前模块的领域活动单一,否则,拆分模块 3. 接口类设计规则:根据接口的权限分为api 和 controller,接口类尽量依据业务进行命名创建,保持接口类功能职责单一,业务耦合度低 4. 业务设计规则:业务service类如果只关注与简单的CRUD或业务逻辑简单,不需要牵涉过多其他实体业务逻辑,采用service即可;如果需要多个业务类的协作,才完成复杂的业务,考虑添加facade类使业务逻辑清晰;保持业务类的职责单一 # 命名规则 1. 所有命名采用英文 + 驼峰 2. 所有包名全部用小写,所有类名首字母大写 # 注释规则 ### 类 * 文件名称与描述必须填写 * 文件作者必须填写 * 每次修改记录版本信息,版本信息记录:修改时间、 ```java /** * 用户信息的请求 * * @author yujia * @version 2016年7月1日 上午11:35:16 yujia 获取个人用户资料的数据 * @version 2017年8月1日15:17:38 suntg 完善类的注释 */ @RestController @RequestMapping(value = "/basic/user") public class UserController { // TODO } ``` ### 方法 * 所有public的方法(简单的getter\setter除外)都要注释 * 方法注释必须要写方法说明、参数说明 * 参数具体到每一个参数 ```java /** * 类的注释 */ public class KindController { //... /** * 根据类目ID获取类目的子类目 * * @param parentId 类目ID * @return */ @RequestMapping(value = "/{parentId}/children", method = RequestMethod.GET) @ResponseBody public List getProductKinds(@PathVariable("parentId") Long parentId) { return kindService.getChildProductKinds(parentId); } //... } ``` ### 属性 * model实体对象的属性,枚举类内容,或者其他一些关键属性都必须写注释 * 注释内容说明该属性表示的含义 ```java public class Kind { /** * 在父级类目中的排序序号 */ @Column(name = "ki_detno") private Short detno; } ``` # 用户操作日志 * 采用AOP方式对所有的@RequestMapping请求自动添加调用记录 * 主要利用swagger的两个注解,@ApiOperation 和 @ApiParam * @ApiOperation 用于API描述说明 * @ApiParam 用于每个参数的描述说明 * 调用日志记录时会自动获取@ApiOperation的value字段信息,自动为请求添加请求说明 ```java public class Kind { /** * 商品类目 * * @param kindIds * 要获取的明细Id,多个用逗号(,)隔开 * @return */ @RequestMapping("/{kindIds}") @ResponseBody @ApiOperation(value = "根据多个ID获取多个类目信息", httpMethod = "GET", notes = "允许获取多个分类,用逗号,分开") public Iterable getProductKind(@ApiParam(required = true, value = "id数组") @PathVariable("kindIds") String kindIds) { return kindService.getProductKinds(kindIds); } } ``` # API接口说明文档 * 利用swagger 自动生成API说明接口