今天来梳理下开发平台的技术选型,原则是主流+开源。进行了大致的分类,不过分类下的项目颗粒度大小不一,有的是某个层次的解决方案,如SpringMVC、MyBatis,有的则是某个功能点的解决方案,如logback、fastjson,后续会不断完善。
定位是企业级通用开发平台,前后端分离架构,前端基于vue,后端java,单工程,多模块,部署形态为单体应用。
SSM+MybatisPlus,使用SpringBoot。
重度使用MybatisPlus,包括主键策略、逻辑删除、乐观锁、自动填充、数据分页、CURD接口、条件构造器等,
二次封装和扩展代码生成器,实现entity、dao、service、controller、vo及前端vue页面生成。
Mybatis,附加MyBatisPlus组件进行功能增强。MybatisPlus对于该层已经做了很好的封装和处理,因此没有再扩展,直接使用包com.baomidou.mybatisplus.core.mapper下的BaseMapper作为基类。
mapper接口类和mapper.xml配置文件,由代码生成器自动实现。
在MyBatisPlus封装的CURD接口上,基于模板方法设计思想,二次封装,将增删改查通用操作在基类中实现,预留新增前、修改后等方法,可由子类根据实际业务需求灵活扩展。在进行具体业务系统的功能开发时,仅需要继承基类,实现特定的业务逻辑即可,代码量大幅减少,代码简洁直观,易于维护。详细示例参见博文https://blog.csdn.net/seawaving/article/details/129591693 服务 章节。
SpringMVC,作为后端的“前哨”,接收前端的请求,调用service层服务接口,返回结果给前端,进行统一的异常处理。使用了实体视图对象VO,在控制器层,负责将前端传入的VO,转换为entity实体,传入到service层,以及将service层返回的entity对象转换成VO,或者进行聚合。
Spring Security,进行身份认证和权限控制。相对Shiro,Spring Security复杂得多,功能也强大得多。
SLF4J作为日志门面组件,可灵活更换日志实现组件。
logback作为日志实现组件,使用了AOP切面技术,实现了审计日志(登录、注销、修改密码等)、运行日志(业务实体增删改查及个性化操作)、调度任务日志(调度任务执行情况)。
apache common,积累和沉淀了很多年,涵盖了常用的工具类,相对guava,优势在于全。
Hibernate Validator,基于注解实现数据验证,结合@ControllerAdvice返回给前端友好提示信息。
druid,性能优秀,且自带监控功能。
spring-data-redis作为门面组件,可灵活更换实现组件。
lettuce作为实现组件,相比Jedis组件实现模式和机制更优秀。
Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
Lettuce基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作。
fastjson,将对象转换/序列化为json字符串,或从json字符串转换/反序列化成对象。
orika,开发中经常需要进行对象间属性拷贝,像apache common和Spring util等工具包提供的大多是浅度拷贝,基本数据类型的属性可实现值拷贝,引用类型的属性需要深度拷贝组件实现。orika使用简单,且性能较高。
comunda,该选型是基于2021年左右的情况,activiti主分支已落寞,在comunda和flowable这两个分支中选择了前者。集成原生工作流引擎工作量很大,当时投入了几个月,实现了主要功能,效果不是很满意。近期未关注发展情况,如有基于comunda或flowable的第三方开源组件,则优先考虑。
Quartz,二次封装,源码实现服务,前端功能页面配置调度,控制启停,调整调度设置(时间、频率、输入参数……),查看调度日志。
RabbitMQ,业务类消息处理。
kafka更适合海量数据的采集和处理,如日志。
netty,主流高性能NIO框架,使用简便,扩展性强,负载能力强悍。
javamail组件二次封装。
Elastic Search,全文搜索的扛把子。
vue3.0,使用开源的vue-elment-plus-admin框架,是之前基于vue2.0和element ui的vue-element-admin框架的升级版。
v-charts,饿了么团队出品的开源组件,基于echarts二次封装,统一提供了一种对前后端都友好的数据格式,只需设置简单的配置项,便可轻松生成常见的图表。支持vue2.0,vue3.0是否有对应的方案待确认。
vue-simple-uploader
组件化封装,兼顾性能和操作便捷性
支持单文件、多文件、文件夹上传
支持拖拽操作方式上传
可暂停、续传
大文件分块上传
支持进度、预估剩余时间、出错自动重试等操作
uni-app,无可争议的多端开发框架,vue开发语言和微信api的组合,巧妙而强大,生态已经做起来了。
MySql,尽量避免使用数据库原生Sql语法与内置函数方法、存储过程,从而可以兼容如oracle、sql server等其他常见的关系型数据库。
redis,存储数据字典、热点数据。
建立抽象层,通过接口定义对于文件的上传、下载、切片等功能;存储方式支持文件服务器、对象储存系统、云环境下的文件存储;通过更改配置,可以灵活选择具体的存储方式,业务应用无感知
jdk | 1.8 |
---|---|
IDE | idea |
web容器 | tomcat |
源码管理 | git |
构建工具 | maven |