搭建项目,离不开架构,一个好的架构可以让开发事半功倍,技术是可替换的,思想是不变的,所以在越往后的技术生涯,你听到更多的是某个技术的核心思想是怎么样的,处理了什么问题。以上,共勉。
随着开发的项目越来越多,越来越体会到项目搭建的重要性,一般情况下后台需要提供:(移动端/网页)接口服务,管理后台接口服务,服务与服务之间的接口服务,怎么让每个模块都尽可能的复用,减少重复代码。
这时就有人说了:“所有的接口服务我都放在一个项目里,这样不管是service,实体类,工具类等都能共用,不就好了吗?”
这个时候就引申了一个问题:在不影响其他的渠道服务的情况下更新某一个渠道服务,这样是不是就会出现问题呢?因为你要更新,所以这个服务需要先停服,一旦停服其他渠道也是引用的这个服务,就会无法使用,并且这个项目会越来越大,框架会交错,维护的成本也会越来越高,新人入手会使得上手困难。
怎么搭建更合适?
没有最合适只有更合适,本篇文章只是个人的一个构思,如果您有更好的方式,欢迎评论
框架选型
- SpringBoot 2.3.5.RELEASE
- Mybatis-plus 3.4.1
- Knife4j 2.0.7
- Lombok
- Maven
项目结构
template-server-v2 #父项目
- template-core #数据库对应的entity,mapper,service,serviceImpl
- template-common #工具类
- template-service #业务处理
- template-controller #接口
工程包职责是怎么分配的
template-common
描述
主要承担template-service的工具类,比如什么MD5,aes的工具类,一些redis的工具类啥的,会放在这里
template-core
描述
主要承担了数据库表对应实体类的映射以及增删改查功。注意这里面是没有任何业务处理的,只有生成的类。
pom.xml 里面集成了 mysql 以及 mybatis-plus 以及 druid,采用mybatis-plus的代码生成插件可以快速的生成实体类service,以及mapper,更可以根据 自定义模板 生成 不同的类 放在 不同的位置
template-core 主要是为了给 template-service 所有类的CRUD操作。
优点
- 采用mybatis-plus生成插件,不需要在idea上安装任何东西,可快速生成实体类以及对应的crud,减去了手动创建的麻烦事,可以修改生成配置,也可自定义模板
- template-service的工程包引用template-core,如果数据库表字段新增或者变更,只需要修改 template-core 内对应的实体便可
template-service
描述
主要承担了业务的完整操作。一般复杂的业务都是由几张表的CRUD组成,因为引用了template-core,所以直接使用提供的CRUD对进行组合拼接成业务。
事务的处理也是在这里,并且 template-service 里面会有 Param 接口参数包以及 VO 视层结果包:主要是为了controller的接口参数的接收以及结果返回
优点
- template-service 的抽离,使得 其他 controller 工程包可以引用,减少相同的代码编写,举个例子:比如我们需要做一个商城,它具有PC版+APP版+小程序版,业务相同的情况下只是 controller 以及校验规则不一样。这个时候就发挥了抽离好处
template-controller
描述
主要承担了接口供给,swagger文档显示,全局异常处理,结果集返回,请求日志保存,接口权限等有关接口处理的操作。这里不处理任何业务,做参数接收以及转发到service
如果有app的接口,管理后台的接口,pc的接口,小程序的接口,那么template-controller会对应有4个工程,可以是template-controller-app,template-controller-applets,template-controller-back,template-controller-pc,
相同的是:引用需要的 template-service 功能包;不同的是:接口校验,登录方式,接口文档,日志记录等。。。
优点
- 不同渠道接口的分离,使得他们不管是升级还是停服都不会相互影响,因为会打多个controller的项目包。
- 框架分离,比如我管理后台之前用的是SpringSecurity,后面用的不爽了我要改成Shiro,只需要修改template-controller-back的工程包,与其他无关,爱咋搞咋搞,搞崩了也只是崩你自己的。没毛病
- 维护性更高,新人来了需要把管理后台的接口给到新人熟悉,只需要关注单一template-controller-back工程包,不会全部接口都挤在一起,新人头疼,自己维护也懵逼
- 扩展性更好,如果template-controller-app需要做负载,那就做单一的工程包服务处理,其他不影响,
项目源码
![](/qrcode.jpg)