加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

如何搭建合适的Web框架?

发布时间:2019-10-12 12:38:55 所属栏目:建站 来源:架构思维
导读:副标题#e# 之前在Web开发框架推导一文中我们一步步的搭建了一个开发框架。 在当时的情况下,还算满足需求。但是随着项目的逐渐完善,需求变更的频度逐渐变得比新增需求的频度高,原来框架的弊端越来越明显,所以需要对框架进行升级改进。 我们先来看原来框

对于赋值来说,Spring提供了BeanUtils来简化处理,虽然是基于反射来设值的,但是对于现阶段来说,这点性能损耗还是没什么影响的。但是,BeanUtils对于不同类型的属性不能进行拷贝,假设我有一个Domain对象Book,里面有个字段Author,现在我要赋值给BookResult,其中有个字段AuthorResult,此时BeanUtils是无法赋值的。所以我编写了一个基于Gson的工具类来处理,性能测试10000次的属性拷贝BeanUtils需要500多毫秒,基于Gson的工具类只需要300毫秒左右。

对于表字段的生成,如果使用的是IDEA的话,IDE默认提供了一个脚本,可以从表来生成POJO!我们可以使用这个脚本来生成Model,然后将字段拷贝到Param和Result中,来简化字段的编写。我对这个脚本进行了修改,以符合项目需求。主要增加了lombok的支持,新增了类注释和字段注释。

替换代码生成

对于上面代码生成组件的问题,我调整了代码生成的方式。不再基于组件来生成,而是基于IDEA本身的FileTemplate、LiveTemplate以及Scripted Extensions来进行生成。虽然这样的方式,不能够一次性生成多个文件,但是由于生成逻辑基本是一次性的,所以影响不是很大。在初次生成代码时,代码生成组件的效率是高于FileTemplate、LiveTemplate以及Scripted Extensions的组合,但是后期调整的灵活性,明显是FileTemplate、LiveTemplate以及Scripted Extensions的组合要高于代码生成组件的:

  • 首先,当文件结构调整时,只需要修改FileTemplate,并将配置文件导出给项目组成员即可。
  • 同样的,当LiveTemplate调整时,也只需要修改对应的LiveTemplate,并将配置文件导出给项目组成员即可。
  • 其次,想生成哪个文件,只要针对这个文件生成即可
  • 第三,通过FileTemplate生成完整的文件后,可以通过LiveTemplate快速的进行模块化的编码
  • 最后,FileTemplate可以设置为项目级别,即每个项目可以有独立的FileTemplate

具体的操作流程,在下面演示。

独立业务逻辑

针对Service和测试的问题,将原来的Controller、Service和Model三层,拆分为四层:

  • Controller负责前端数据的接收和返回,以及统一异常处理
  • Service负责事务以及Domain层逻辑的组装。这里就不会出现事务嵌套问题,也就不会导致抓不到期望的异常的问题
  • Domain负责业务逻辑
  • Model负责数据持久

这样Service的职责减轻了,同时不再有事务嵌套的问题。

Model层优化

上面提到,框架中最终放弃了Mapper.xml,转而使用Mybatis的注解来实现持久化操作。改用注解,规避了XML代码的编写,但是并没有解决框架对Mybatis的强依赖。所以这里在Domain中新增了Repository接口层,此层用于定义Domain的持久化操作,而Model层中对Repository进行实现,这里的实现就是Mybatis实现。这样做有两个好处:

  • 依赖倒置:原来是Domain依赖Model层,而现在是Model层依赖Domain层,这样当我要把Mybatis替换掉时,Domain完全无感知。
  • 独立测试:因为现在Domain不依赖于其它任何层,所以可以脱离数据库和容器来进行测试。使得测试的效率不会随着项目的开发而越来越低
如何搭建合适的Web框架?

框架改进细节

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!