独立业务逻辑
针对Service和测试的问题 , 将原来的Controller、Service和Model三层 , 拆分为四层:
- Controller负责前端数据的接收和返回 , 以及统一异常处理
- Service负责事务以及Domain层逻辑的组装 。这里就不会出现事务嵌套问题 , 也就不会导致抓不到期望的异常的问题
- Domain负责业务逻辑
- Model负责数据持久
Model层优化
上面提到 , 框架中最终放弃了Mapper.xml , 转而使用Mybatis的注解来实现持久化操作 。改用注解 , 规避了XML代码的编写 , 但是并没有解决框架对Mybatis的强依赖 。所以这里在Domain中新增了Repository接口层 , 此层用于定义Domain的持久化操作 , 而Model层中对Repository进行实现 , 这里的实现就是Mybatis实现 。这样做有两个好处:
- 依赖倒置:原来是Domain依赖Model层 , 而现在是Model层依赖Domain层 , 这样当我要把Mybatis替换掉时 , Domain完全无感知 。
- 独立测试:因为现在Domain不依赖于其它任何层 , 所以可以脱离数据库和容器来进行测试 。使得测试的效率不会随着项目的开发而越来越低

文章插图
框架改进细节现在已经知道了 , 如何对框架进行改进 , 我们现在就开始着手进行改造 。其实主要的改造是对代码生成方式的改造 , 也就是编写FileTemplate、LiveTemplate和ScriptedExtensions 。下面对这三个功能进行简单的说明 , 先说ScriptedExtensions 。
Scripted Extensions
先来解释一下 , 什么是Scripted Extensions 。我们都知道 , 现在的IDE都是插件式的 , 也就是说 , 我们可以通过开发商提供的插件开发包来开发插件 , 扩展现有的IDE功能 。但是编写插件需要特定的开发环境 , 如果是一个很简单的功能 , 还要费劲去搭开发环境 , 挺麻烦的 。所以IDEA提供了Scripted Extensions , 可以理解为一个简化版的插件 , 就是可以通过脚本来扩展IDE功能 。
IDEA提供了Database功能 , 可以连接数据库进行相关操作 。当你连接了数据库 , 在表上右击时 , 可以看到Scripted Extensions这个选项 , 里面有一个功能是可以基于表来生成POJO的groovy脚本 。
但是功能比较low:
- 包名是写死的:com.sample
- 没有生成table注释
- 没有基于lombok来简化getter和setter

文章插图
直接对这个groovy文件Ctrl+c , Ctrl-v , 复制一份 , 重命名一下 , 基于这个脚本进行修改即可 。具体怎么修改 , 按照自己的需求来 , 里面主要就是根据表信息对String的拼接而已 。
FileTemplate
FileTemplate是IDEA提供的生成文件的模板 , 你在点击菜单的File->New...以后 , 出现的各种文件 , 都是基于FileTemplate来实现的 。我们自定义的Controller、Service、Domain等类 , 都可以通过FileTemplate来简化创建 。
具体使用方式为,按下Ctrl-Alt-S呼出设置菜单 , 点击Editor->File And Code Template , 在里面新增Template即可 。

文章插图
几点说明:
- 下面的描述中列出了默认的一些参数以及作用
- 你也可以自定义变量 , 自定义的变量如果没有赋值 , 在创建时会有输入框提示输入内容
- 模板是基于Velocity的 , 所以如果你熟悉 Velocity , 那就可以直接上手
- Enable Live Template选项是在FileTemplate激活LiveTemplate变量 , 不过需要使用#[[]]#包裹 。但是对于创建Java , 这个功能有bug , 并不能定位到需要的位置 , 所以暂时没使用
推荐阅读
- mysql优化实战:千万级数据表如何进行分页查询?
- Java 类在 Tomcat 中是如何加载的?
- 你如何看待生活中的茶文化
- 淘宝app如何显示全屏 淘宝页头怎么设置全屏
- 杯茶是如何征服世界的
- 如何避免类目错放 错放类目玩法
- 如何理解饮食和品茶的不同文化
- 淘宝小站怎么申请 淘宝分享小站如何开通
- 淘宝新店怎么做起来? 淘宝新店如何做起来
- 云南红茶有什么特点如何购买云南红茶
