遇见技术栈——公司自用OA项目讲解
本次分享的是前些日子给东家写的OA项目技术栈
先给大家看一下项目的大致主界面吧
首先我得声明一下,展示的这个只是个之前制作的基本dome,也是我前端的一个开源项目,想看看大致效果的可以通过这个链接查看http://49.233.186.140/#/signin
,这个只是前端展示,是没有后台的。
没办法,跟东家签了字的,可不能随便把东西发出来作死啊。
前端部分技术栈
前端部分技术栈主要采用了vue2.6
+element-ui 1.13.1
+iview 4
,当然也有一些像vue-simple-uploader(大文件分片上传组件)
、vue-echarts(制表图形组件)
等具有特殊功能的组件。
vue的好处就不用多说了吧:
- 轻量级框架
- 简单易学
- 双向数据绑定
- 组件化
- 视图
- 数据和结构分离
- 虚拟DOM
- 运行速度快
除了这些还有丰富的配套组件,现阶段的新项目想必大部分都是vue开发的了。所以这里我就多说下其他组件技术栈的使用吧。
-
首先说一下这
element-ui 1.13.1
+iview 4
,大家写vue的时候只怕之后引入这其中的一个吧,因为很多功能相似,所以也没有必要全部引入进来,甚至有的人可能会怕两个组件会有冲突。 首先我想说一下,两个组件不存在冲突,引入后组件本身可以正常使用且不受任何影响。 -
其次,我引入这俩个组件的主要目的,是因为这个项目的弹出框问题,在这个类似Windows10的仿桌面前端系统中,每一个路由页面就是一个以
iview
中model
的弹出框,使用这个组件的原因是因为该组件允许上下左右进行移动,这是elementui
中el-dialog
不曾拥有的。 -
另外,因为
iview
中model
的弹出框并不支持重叠弹出,而正常的项目中,任何一个项目页面都需要弹出框来支持进行增删改查…的相关操作,所以这时候可以使用elementui
中的el-dialog
来弥补这个双重弹框的效果。 -
关于
vue-simple-uploader
的使用是因为需要一个公司自己的网盘功能,为了方便快速上传和适配更多的机器,所以上传选择了大文件上传,利用这套组件也能达到快速开发的目的。
后端技术栈与数据库选型
后端部分使用的是SpringCloud F版
和springboot 2.0.3
为基础,格外还引入了例如 springmvc
、mybatis
、mybatis-plus
、shiro
、logback
、jwt
等。其中SpringCloud引入了openfeign
、gateway
、Alibaba下的nacos
和seata
、值得注意的是还没有引入ZipKin
Sleuth
。数据库方面使用的是MySQL5.7
,缓存使用的是redis3
。
这里先说一下使用alibaba套件的原因。其实项目后端原本使用的是Eureka
、config
那些Netflix官方的套件,Alibaba那些套件是后来用于替换上的,因为这个OA项目主要是我们公司自己使用,公司又不大,所以顶得住折腾,我本人在去年就开始捣鼓Alibaba那些套件,像nacos
、sentinel
、seata
这些,也相对的了解了这些组件的优势,其次之前Eureka等组件又断更了。所以就小幅度的替换了一下,得益于SpringCloudCommon
的封装,替换过程并没有太大问题。
-
关于后端设计方面主要是分为了,鉴权服务(authentication servie)、网关服务(gateway service)、配置中心(nacos)、分布式事务(seata)、云盘服务(cloud service)、管理服务(management service)、流程服务(process service)、信息发布服务(release service)、事务管理服务( transaction service)、系统管理(system service)
-
nacos
同样支持基于 DNS 和基于 RPC 的服务发现,并且集成了SpringCloudConfig
那样的配置中心。我们知道,使用SpringCloudConfig
的时候,需要一个服务方,我们的服务需要调用服务方获取配置信息,而Nacos
中集成了配置中心的话就会相当于少了一个服务方,服务直接访问注册中心便可以获取配置文件。性能上Nacos
获取服务信息的速度和Eureka
不相上下,而获取配置文件则比SpringCloudConfig
要快上很多,因为SpringCloudConfig
的服务方也要单独放到一个服务器上,而这个服务器想必是不会和注册中心的是一个重量级的吧。 -
mybatis-plus
的使用除了简化代码以外,最重要的莫过于在别人看你写的代码时,能够更快的知道你调用的这个dao
的方法是用来干什么的。而且在修改数据库,新增字段时,也不用费劲去修改mapper
的文件了。 -
logback
是一款开源日志组件,它的使用算是很平常了,配置文件报错打印,数据库调用打印,openfeign打印,一样都少不了。 -
shiro
是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。最近有想法换成SpringSecurity
,因为实现Oauth2.0
的教程相对较多,更是spring
自己家的东西,使用起来贴合度更高,但是鉴权框架这东西不好换啊,又怕引发大问题。 -
seata
是 阿里巴巴开源的分布式事务中间件,以高效并且对业务 0 侵入的方式,解决微服务场景下面临的分布式事务问题。引入他就能解决90%的分布式事务问题了,只不过这个组件目前还比较新,使用起来坑是非常的多,所以能别动还是别动比较好。值得一提的是seata0.9
的版本之前配置文件非常多,如果有需要使用的话还是建议使用1.0以后的,最好是现在的1.2,基本上已经没有配置文件了,性能上也还可以承受。 -
MySQL5.7
我就不多介绍了,我们使用过的是腾讯云的,MySQL的性能堪比Orace、生态又比SqlServer多,没啥好选的,本项目主要分了三个库,一个预上线使用,一个线上环境,一个备份环境。
总结
关于这个项目一时半会是不太好讲完的,所以目前只能先列出来一点给大家分享一下思路,因为是自己公司内部使用的,所以体量也不是很大。但是覆盖的技术栈还是很广的,对技术提升还是有很多的帮助。
第一次写这种讲解类型的文章,实在有点无从下笔,言语不明、语句不通之处还请见谅,希望大家能认真读下来,或多或少的学到一点知识。
如果觉得有帮助的话给个免费的点赞吧,Thanks♪(・ω・)ノ