OS后端源码的一些扩展点说明

2018-12-25 18:57 [复制链接] 81 0

代码的扩展性遵循OCP原则,扩展工作对原有代码具有尽量少的污染和侵入。
以下文字说明 仅仅是为扩展工作做一些指导性的说明,具体请根据<样例参照>一栏 参照源码中已实现的例子。
一、分页组件框架,第三方基础组件使用的是Mybatis的Plugin-PageHelper
  • 核心组件
    1.PageControllerService.java - 放置在Controller方法上的分页注释,用于为方法提供分页功能,以及匹配前端传来的分页排序参数和设置默认值;
    2.PageInterceptor.java - 自定义SpringMvc拦截器,主要的功能是 如果配置了PageControllerService注释,就为其提供分页功能;
  • 使用方式
    1.在需要有分页以及排序功能的Controller方法上配置PageControllerService注释;
    2.在dao层编写分页方法,并且返回类型设置为com.github.pagehelper.Page<T>;
    3.在mapper.xml文件中编写基本的查询逻辑(无需有分页和排序)即可;
  • 样例参照:com.videojj.videoportal.controller.CreativeController.queryCreativeByPage();

二、SpringMvc端参数验证框架,主要利用SpringValidation组件搭建
  • 核心组件
    1.GlobalExceptionHandler.java - 全局异常捕获器,各类方式的参数验证失败的异常在此捕获,以及提示信息的拼接;
    2.ValidationMessages.properties - 异常未通过时的提示信息;
  • 目前主要提供的功能
    1.对controller方法的基本类型的提交的参数进行验证
    2.对controller方法的对象类型的json方式提交的参数进行验证
    3.在全局设置了文件未上传异常捕获器,但要用MultipartFile类型去接收
    4.对controller方法的对象类型的form方式提交的参数进行验证
  • 使用方式
    1.在需要验证的元素上增加JSR-303规范的注释;
    2.在需要验证顺序的BeanClass上标注@GroupSequence注释,并且设置具体顺序;
    3.在验证逻辑较为复杂的情况下,可以实现ConstraintValidator<A,B>,然后封装成自定义验证注释的方式;
    4.在controller中需要验证的Bean前添加@Validated注释,如果需要验证的是controller方法中基本类型 则在controller类上添加@Validated注释;
  • 样例参照:com.videojj.videoportal.controller.CreativeController;

三、操作日志功能的扩展,主要由SpringAop技术实现;
  • 核心组件
    1.OperationLogAspect.java - 操作日志切面,操作日志的主处理逻辑;
    2.OperationLogAnnotationService.java - 标注在需要被记录操作日志的方法上的注释;
    3.OperationLogTypeEnum.java - 需要被扩展的操作日志类型;
  • 使用方式
    1.在OperationLogTypeEnum.java中添加新操作日志类型,不同类型建议用序号 并在不同大类间预留20条;
    2.如果需要收集的操作日志信息在方法入参就含有,则在方法头部添加@OperationLogAnnotationService注释,descArgPositions指需要收集的方法入参位置(数值0起始),fieldNames指 如果方法入参是对象 则可以用此属性指定属性名称,支持对象的导航功能,比如"attr1.attr2";
    3.如果需要收集的操作日志信息在方法体,可以按照此步骤收集:①OperationLogService.java定义方法 ②OperationLogServiceImpl.java中实现此方法,并做第2步的操作 ③在方法体中调用此方法即可;
  • 样例参照:com.videojj.videoservice.service.impl.CreativeServiceImpl.updateInfo()、com.videojj.videoservice.service.impl.CreativeServiceImpl.deleteCreativeByCreativeId()、com.videojj.videoservice.service.impl.CreativeServiceImpl.InteractionTypeServiceImpl.addInteractionInfo() 三种方式;


使用道具 举报 只看该作者 回复
最新评论 | 正序浏览
只看楼主|楼层直达:
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|站点地图|Video++ ( 沪ICP备14042830-6号

Powered by video++

快速回复 返回顶部 返回列表