-
背景描述
我们目前的后端代码架构,看样子有点像是贫血模型DDD的风格,简单来说,就是
- 在Service业务层的方法中,多属性的模型里,入参命名为xxxDTO,返回命名为xxxVO;
- 在Controller接口层就是用泛型多包装了一下,入参时ApiRequest,返回时ApiResponse ,
- 在Repository持久层,我司采用的是增强mybatis的框架,Mybatis-Plus,所有的数据库返回模型类,都放在包名po下,类名一般不加PO后缀。
- 有些BO模型放在bo包下用来装一些SQL语句查询返回,用于在Service层中进行处理业务逻辑,不会出现在Controller接口层的包装中。
- 在持久层的基础组件中,我司业务种用的是Mysql5.7版本。
- 在前后端开发使用的是分离技术,即前端使用流行的VUE+Element-UI ,后端提供json数据格式的http接口。
在贫血模型的大部分情况下,各层的各种O基本都是只有属性,也可以叫字段 的get,set;而且很多时候,各层的O直接的属性和字段差异都不大,所以为了解决各种O之间的数据传递问题,我发现core项目代码中大部分是一半是用hutool提供的BeanUtil中的copyProperties方法,另一大半的是用的是bop脚手架封装的BeanUtils的convert或者copyProperties;至于 common-lang3提供的或者Spring提供的 BeanUtils几乎没有!
设计思路
在数据权限模块下,我们坚持的原则是数据库驱动原理去做的,也就是数据库有的字段,我们才能做处理。我们基本只关心分页,列表,详情,修改这4种接口,(分页,列表,详情)对应select语句,(修改)对应update语句。用图来描述如下一次HTTP请求中的流程:
如上图,对于【行权限】的处理原理,就是将配置的条件,转化成SQL语句种where/join后面的条件,拦截SQL语句并改写,从而达到行权限过滤数据行的目的!在针对【列权限】的处理,最开始的想法是将值进行