背景
哎!自创业以来就从分布式应用转玩单体应用,除搭建基础框架外也免不了花点时间写部分业务代码,刚开始还好但随着需求朝令夕改都快疯了!虽然现在使用Vue+SpringBoot+Shiro+Mybatis+MySQL开发效率还行,但发现还是存在不少重复逻辑的代码。
需求
- 发现重复逻辑
- 抽象重复逻辑
分析
- 重复逻辑:接下来咱们一步步拆分CMS系统
-
模块维度:CMS系统基本由用户模块、权限模块、系统模块与具体业务相关的模块
- 网上有不少开源项目自带这块功能,甚至更丰富。如:https://www.stylefeng.cn/,不过我们自研了这块就不深入讨论咯
-
页面维度:每个模块的实现都可看做是一个个单独的页面组合组成
1584861368(1).png -
操作维度:每个页面的实现又可以看做是多个操作的组合
1584861588(1).png -
抽象重复逻辑:通过对系统的拆分,最终可发现操作为整个系统的最小单元(对用户而言),接下来咱们从技术上对这些最小单元进行抽象
- 归类。可归为:新增/更新整条记录、删除、查询、审核、支付、冻结、上传、导入、导出等
-
设计
既然可以将操作可以归类,那咱们可以面向操作类型来编程,并在通用处理前后提供SPI给上层定制逻辑
- 问题
- 怎么抽象具体操作类型的方法?比如新增时不同页面新增字段不一样、查询时也不一样
- 抽象入参。比如新增入参统一使用各个模型的父类,查询的时候传入Map<String, Object>。当然可以都采用Map<String, Object>来接收个字段的值
- 抽象出参。出参一般已被抽象为处理状态、错误描述、附加信息。不难发现只要将附加信息抽象好其它都OK,针对上述归类,可以看到只有查询需要附加信息,所有可以将附加信息为List<Object>
- TODO 应该还会存在不少问题,等实现时遇到再记录在此
- 怎么抽象具体操作类型的方法?比如新增时不同页面新增字段不一样、查询时也不一样
网友评论