AgileBoot

仓库

后端地址:https://github.com/valarchie/AgileBoot-Back-End

技术栈:Springboot / Spring Security / MyBatis Plus JPA 无XML/ Druid / Redis / Hutool / JWT

前端地址:https://github.com/valarchie/AgileBoot-Front-End

技术栈:Vue3 + ElementUI plus + Vite

由来

AgileBoot这个项目的建立是因为闲暇时间想自己捣鼓一点小东西,于是当时网上找了很多快速开发脚手架。比如Ruoyi/Jeecg-boot/ElAdmin/renren等框架。

芋道也弄了一个Ruoyi-Pro的项目,但是功能一大堆,太重了,可能质量得不到保证。

最后选择了Ruoyi框架作为自己开发一些小东西的脚手架。首先首先,非常感谢Ruoyi作者整理出这个项目。

但是当我把Ruoyi项目翻了一遍之后。发现项目的代码水平和质量都.....   emm...   有点不像一个专业后端人员开发出来的项目。

存在一些缺陷:

  • 命名比较乱七八糟(很多很糟糕的命名,包括机翻英语乱用)
  • 项目分包以及模块比较乱
  • 比较原始的Controller > Service > DAO的开发模式。过于面向过程。
  • 一大堆自己造的轮子,并且没有UT覆盖。
  • 大量逻辑嵌套在if else块当中
  • 值的前后不统一,比如有的地方1代表是,有的地方1代表否
  • 很多很奇怪的代码写法(比如return result > 0 ? true:false..    一言难尽)

于是乎我基于Ruoyi项目,整个进行了重构。

重构内容

设计:

  1. 将MyBatis迁移到Mybatis Plus(迁移工作非常耗时间)+ JPA的形式进行数据增删改 + 无XML
  2. 迁移FastJson到Jackson(FastJson的坑就不多说了)
  3. 对数据库的表进行重新优化设计
  4. 去除所谓的低代码生成.....(这种级别的代码生成其实意义不大,真正拿这个脚手架来开发的话,也用不上)
  5. 各个层的日志进行切面打印
  6. 前后端密码加密传输
  7. 设计多级缓存体系 Map -> Guava > Redis. 不同场景使用不同级别的缓存。Redis缓存内嵌入本地缓存。
  8. 合理的分包: common(公共包) / infrastructure(基础框架设施) / domain(业务逻辑) / orm(数据层) / admin(管理后台) / api (外部API)
  9. Ruoyi的角色是多职位多角色的设计,但是作为小型快速开发脚手架,没必要这样设计,我改成单职位单角色。
  10. 统一注解拦截数据权限

规范:

  1. 切分不同环境的启动文件
  2. 统一设计异常类
  3. 统一设计错误码并集中管理
  4. 统一系统内的变量并集中管理
  5. 统一返回模型
  6. 引入Google代码格式化模板(Ruoyi的代码格式很另类....)
  7. 后端代码的命名基本都整改OK
  8. 前端代码的命名也非常混乱,进行了整改

整改:

  1. 引入hutool包以及guava包去掉大量自己造的轮子(大量工作.....)
  2. 引入lombok去除大量getter setter代码
  3. 调整日志级别
  4. 字典类型数据完全用Enum进行代替
  5. 移除SQL注入的Filter,因为迁移到Mybatis Plus就不会有这个注入的问题
  6. XSS直接通过JSON拦截过滤。
  7. 替换掉很多Deprecated的类以及配置

优化:

  1. 优化异步服务
  2. 优化Excel相关类的设计,采用hutool包成熟的轮子
  3. 权限判断使用缓存
  4. IP地址查询引入离线包
  5. 引入多级缓存体系

还有很多整改的点一时想不起来了,很多细枝末节的改动,整改整个项目花了很多时间。基本上整个项目都重构了一遍。

项目的愿景

想致力于打造一个真正能用在生产的小型开发脚手架,可用于外包或者公司内部的小项目。Ruoyi感觉有点像玩具项目。但是也很多人直接拿去用。

但是用着应该不是那么省心。

本项目的主要目标是

  1. 安全性
  2. 代码规范性
  3. 更面向对象(伪DDD)
  4. 小而美的理念(不会加一大堆功能...) 如果有非常常用的功能的话,可以讨论加上
  5. 真正的生产型项目

项目操作手册

前提:安装好 MySQL / Redis / npm

后端项目:

  • git clone https://github.com/valarchie/AgileBoot-Back-End
  • IDEA引入项目
  • 更改数据库账号
  • 更改Redis账号
  • 更改IDEA启动配置
  • IDEA -> Run 即可

前端项目:

  • git clone https://github.com/valarchie/AgileBoot-Front-End
  • Vscode引入项目
  • npm install
  • npm run dev

访问localhost即可

最后

本人水平一般能力有限。有错误或者代码规范或者设计上的问题,恳请大家指出。欢迎大家提Issue, 提PR. 每周都会更新。

PS:前端方面是小白,有大佬来一起优化吗~ 嘿嘿

AgileBoot - 基于SpringBoot + Vue3的前后端快速开发脚手架的更多相关文章

  1. 一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

    一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...

  2. 基于RAP(Mock)实现前后端分离开发

    看看RAP的官方定义: 什么是RAP? (Rigel API Platform) 在前后端分离的开发模式下,我们通常需要定义一份接口文档来规范接口的具体信息.如一个请求的地址.有几个参数.参数名称及类 ...

  3. laravel5.7 前后端分离开发 实现基于API请求的token认证

    最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...

  4. 基于spring security 实现前后端分离项目权限控制

    前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于spring security实现前后端的同步权限控制. ...

  5. SpringBoot,Vue前后端分离开发首秀

    需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...

  6. Springboot前后端分离开发

    .1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析 2,按照下面流程走一遍 此时会加载稍等一下 pom.xml显示中加上阿里云镜像可以加速下载配置文 ...

  7. springboot+vue的前后端分离与合并方案

    pringboot和vue结合的方案网络上的主要有以下两种: 1. [不推荐]在html中直接使用script标签引入vue和一些常用的组件,这种方式和以前传统的开发是一样的,只是可以很爽的使用vue ...

  8. [转] 前后端分离开发模式的 mock 平台预研

    引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都 ...

  9. 超简单工具puer——“低碳”的前后端分离开发

    本文由作者郑海波授权网易云社区发布. 前几天,跟一同事(MIHTool作者)讨教了一下开发调试工具.其实个人觉得相较于定制一个类似MIHTool的Hybrid App容器,基于长连的B/S架构的工具其 ...

随机推荐

  1. ABC251 题解

    典中典比赛 . 目录 A - Six Characters B - At Most 3 (Judge ver.) C - Poem Online Judge D - At Most 3 (Contes ...

  2. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  3. 使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_137 新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三 ...

  4. 5.20 NOI 模拟

    万年不更题解的鸽子来更题解了 \(T1\)矩阵 是个炒鸡恶心的推式子题 求\([x_1,x_2],[y_1,y_2]\)内部的数字和,把矩阵分成四份比较容易想到,差分也容易想到 \(Sum[x][y] ...

  5. Spring源码 14 IOC refresh方法9

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  6. Redis入门到实战

    一.Redis基础 Redis所有的命令都可以去官方网站查看 1.基本命令 keys * 查找所有符合给定模式pattern(正则表达式)的 key .可以进行模糊匹配 del key1,key2,. ...

  7. RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  8. 解决:Uncaught TypeError: $ is not a function

    本来好好的,突然就出现的错误,不过这并不是什么难解决的错误: 我的问题是:在js文件里我定义了一个var $;变量,只要把这个去掉就没问题了. 出现这种错误的解决方法: 1,先看看你的jq文件是否已经 ...

  9. C#使用Spire.Pdf包对PDF文档进行数字签名

    背景 对PDF文档进行数字签名的需求 对PDF文档添加水印的需求 网上资料版本不一或不全 本文章提到的Spire.Pdf均是使用的Spire.Pdf for .NET,除此之前还有其他语言的版本,如S ...

  10. 高颜值,类似Fliqlo的翻页时钟-BdTab新标签页插件组件

    起因: 很多用户在使用BdTab插件时,反馈说希望添加一个时钟的功能, 而BdTab又是组件模块化的插件,于是在空余时间就用html+js+css写了一款高颜值的分页时钟 源码如下: 需要其他网页组件 ...