V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ngduncent
V2EX  ›  程序员

Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的 Springboot + Vue3 的快速开发脚手架

  •  
  •   ngduncent · 2022-12-07 20:13:46 +08:00 · 3109 次点击
    这是一个创建于 744 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ⚡平台简介⚡

    AgileBoot 是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠代码风格优良项目规范的小型开发脚手架。 适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的模板项目。

    • 前端采用 Vue3 、Element UI 。对应前端仓库 AgileBoot-Front-End ,保持同步更新。
    • 后端采用 Spring Boot 、Spring Security 、Redis & Jwt 、Mybatis Plus 、MySql 。
    • 权限认证使用 Jwt ,支持多终端认证系统。
    • 支持加载动态权限菜单,多方式轻松权限控制。
    • 🙌 有大量的单元测试,集成测试覆盖确保业务逻辑正确。🙌

    有任何问题或者建议,可以在 Issues 中提给作者。 也可以发 PR 。

    您的 Issue 比 Star 更重要 😆

    😜 如果觉得项目对您有帮助,可以来个 ⭐ Star ⭐

    💥 在线体验 💥

    演示地址:

    账号密码:admin/admin123

    项目地址:

    🌴 项目背景 🌴

    本项目基于 Ruoyi 项目进行完全重构改造。
    首先非常感谢 Ruoyi 作者。但是 Ruoyi 项目存在太多缺陷。

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

    很多人直接使用开源项目二开,但是代码不规范,可维护性不高,导致使用者的二开的成本比较高。

    于是我做了大量的重构工作。

    重构内容

    • 规范:
      • 切分不同环境的启动文件
      • 统一设计异常类
      • 统一设计错误码并集中处理异常
      • 统一系统内的变量并集中管理
      • 统一返回模型
      • 引入 Google 代码格式化模板
      • 后端代码的命名基本都整改 OK
      • 前端代码的命名也非常混乱,进行了整改
      • 规范系统内的常量
    • 整改:
      • 引入 hutool 包以及 guava 包去掉大量自己造的轮子,尽可能使用现成的轮子
      • 去除代码中大量的 warning
      • 引入 lombok 去除大量 getter setter 代码
      • 调整日志级别
      • 字典类型数据完全用 Enum 进行代替
      • 移除 SQL 注入的 Filter ,因为迁移到 Mybatis Plus 就不会有这个注入的问题
      • XSS 直接通过 JSON 序列化进行转义。
      • 替换掉很多 Deprecated 的类以及配置
      • 替换 fastJson 为 Jackson
      • 数据库的整体重构设计,缩减至 10 张表。
      • 重新设计异步代码
      • 前后端密码加密传输(更严谨的话,还是需要 HTTPS )
      • 重构权限校验和数据权限校验(直接都通过注解的形式)
    • 优化:
      • 优化异步服务
      • 优化 Redis 缓存类,封装各个业务缓存,提供多级缓存实现
      • 权限判断使用多级缓存
      • IP 地址查询引入离线包
      • 前端优化字典数据缓存
      • 启动优化
      • i18n 支持
      • 优化 excel 工具类,代码更加简洁
      • 将所有逻辑集中于 Domain 模块中
      • 切面记录修改者和创建者
      • 统一设置事务

    ✨ 使用 ✨

    技术栈

    技术 说明 版本
    springboot Java 项目必备框架 2.7
    druid alibaba 数据库连接池 1.2.8
    swagger 文档生成 3.0.0
    mybatis-plus 数据库框架 3.5.2
    hutool 国产工具包(简单易用) 3.5.2
    mockito 单元测试模拟 1.10.19
    guava 谷歌工具包(提供简易缓存实现) 31.0.1-jre
    junit 单元测试 1.10.19
    h2 内存数据库 1.10.19
    jackson 比较安全的 Json 框架 follow springboot

    🙊 系统内置功能 🙊

    🙂 大部分功能,均有通过 单元测试 集成测试 保证质量。

    功能 描述
    用户管理 用户是系统操作者,该功能主要完成系统用户配置
    部门管理 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限
    岗位管理 配置系统用户所属担任职务
    菜单管理 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能
    角色管理 角色菜单权限分配、设置角色按机构进行数据范围权限划分
    参数管理 对系统动态配置常用参数
    通知公告 系统通知公告信息发布维护
    🚀 操作日志 系统正常操作日志记录和查询;系统异常信息日志记录和查询
    登录日志 系统登录日志记录查询包含登录异常
    在线用户 当前系统中活跃用户状态监控
    系统接口 根据业务代码自动生成相关的 api 接口文档
    服务监控 监视当前系统 CPU 、内存、磁盘、堆栈等相关信息
    缓存监控 对系统的缓存信息查询,命令统计等
    连接池监视 监视当前系统数据库连接池状态,可进行分析 SQL 找出系统性能瓶颈

    目前版本是 V1.6 ,将在 2.0 版本后陆续新增新功能。

    🐯 工程结构 🐯

    agileboot
    ├── agileboot-admin -- 管理后台接口模块(供后台调用)
    │
    ├── agileboot-api -- 开放接口模块(供客户端调用)
    │
    ├── agileboot-common -- 精简基础工具模块
    │
    ├── agileboot-infrastructure -- 基础设施模块(主要是配置和集成)
    │
    ├── agileboot-domain -- 业务模块
    ├    ├── user -- 用户模块(举例)
    ├         ├── command -- 命令参数接收模型(命令)
    ├         ├── dto -- 返回数据类
    ├         ├── model -- 领域模型类
    ├         ├── query -- 查询参数模型(查询)
    │         ├────── UserApplicationService -- 应用服务(事务层,操作领域模型类完成业务逻辑)
    │
    ├── agileboot-integration-test -- 集成测试模块
    │
    ├── agileboot-orm -- 数据映射模块(仅包含数据相关逻辑)
    ├    ├── entiy -- 实体类
    ├    ├── enums -- 数据相关枚举 
    ├    ├── mapper -- DAO 
    ├    ├── query -- 封装查询对象 
    ├    ├── result -- 封装多表查询对象 
    └──  └── service -- 服务层
    

    代码流转

    请求分为两类:一类是查询,一类是操作(即对数据有进行更新)。

    查询:Controller > xxxQuery > xxxApplicationService > xxxService(Db) > xxxMapper
    操作:Controller > xxxCommand > xxxApplicationService > xxxModel(处理逻辑) > save 或者 update (本项目直接采用 JPA 的方式进行插入已经更新数据)


    🎅 技术文档 🎅

    最后

    本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架。 适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的案例。

    希望大佬们有兴趣的话~ 可以一起来完善这个项目,让这个项目更规范,代码更好维护,真正成为一款能作为生产直接使用的开源项目。

    PS: 鄙人前端小白,仅在对应的 ruoyi 原版前端项目上做了大概 50%的重构。能力有限,有没有前端大佬一起来重构一下前端项目呀~~ 目前打算改成 TS 。

    全栈技术交流群:1398880

    10 条回复    2022-12-08 18:55:37 +08:00
    ngduncent
        1
    ngduncent  
    OP
       2022-12-07 20:19:59 +08:00
    欢迎大佬们~来提提意见~~
    顺便问问有前端大佬一起来优化重构前端项目吗~~~
    me221
        2
    me221  
       2022-12-07 20:26:26 +08:00
    www.agileboot.cc

    ==============
    网站暂时无法访问
    该网站未根据工信部相关法律规则进行备案。
    subframe75361
        3
    subframe75361  
       2022-12-07 20:28:58 +08:00
    已 star 支持~
    ngduncent
        4
    ngduncent  
    OP
       2022-12-07 20:47:37 +08:00
    @me221 可以先试试 www.agileboot.vip 这个备案号了
    ngduncent
        5
    ngduncent  
    OP
       2022-12-07 20:48:25 +08:00
    捞一个前端大佬呀~~~~~~ 有没有前端大佬帮忙优化一下对应前端项目~~
    muchenlou
        6
    muchenlou  
       2022-12-08 08:52:51 +08:00 via iPhone
    可以整个多租户的版本吗
    ruoxie
        7
    ruoxie  
       2022-12-08 13:55:49 +08:00
    前端仓库地址贴错了,如果是我写前端我会选择 TSX + Ant Design Vue (用了 vue3 之后只用过 Ant Design Vue ,因为对 TSX 支持程度更好,开发体验也更好,template 方式对 TS 的支持太差了)。ps:除非给的太多,不然这辈子我是不想碰非 TS 写的前端项目了
    kylix
        8
    kylix  
       2022-12-08 17:20:14 +08:00
    看了下有点眼熟,仔细一看是基于若依的。
    想法不错,支持!
    ngduncent
        9
    ngduncent  
    OP
       2022-12-08 18:52:42 +08:00
    @kylix 嗯嗯 基于 ruoyi 改造 ruoyi 初衷不错 但是好乱
    ngduncent
        10
    ngduncent  
    OP
       2022-12-08 18:55:37 +08:00
    @ruoxie sorry 。。。 我现在才发现我贴错地址了。。
    之前也有想改成 ant design vue.. 但是不是官方维护的,有点顾虑
    嗯嗯 前端项目有打算改成 TS
    我是前端菜鸟~ 欢迎大佬再给点意见~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2716 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:07 · PVG 14:07 · LAX 22:07 · JFK 01:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.