⚡平臺簡介⚡
AgileBoot是一套開源的全棧精簡快速開發平臺,毫無保留給個人及企業免費使用。本專案的目標是做一款精簡可靠,程式碼風格優良,專案規範的小型開發腳手架。
適合個人開發者的小型專案或者公司內部專案使用。也可作為供初學者學習使用的模板專案。
- 前端採用Vue3、Element UI。對應前端倉庫 AgileBoot-Front-End ,保持同步更新。
- 後端採用Spring Boot、Spring Security、Redis & Jwt、Mybatis Plus、MySql。
- 許可權認證使用Jwt,支援多終端認證系統。
- 支援載入動態許可權選單,多方式輕鬆許可權控制。
- ? 有大量的單元測試,整合測試覆蓋確保業務邏輯正確。?
有任何問題或者建議,可以在 Issues 中提給作者。 也可以發PR。
您的Issue比Star更重要 ?
? 如果覺得專案對您有幫助,可以來個 ⭐ Star ⭐
? 線上體驗 ?
演示地址:
賬號密碼:admin/admin123
專案地址:
- https://github.com/valarchie/AgileBoot-Back-End
- https://github.com/valarchie/AgileBoot-Front-End
- 碼雲gitee有對應地址進行同步
? 專案背景 ?
本專案基於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的方式進行插入已經更新資料)
? 技術文件 ?
- AgileBoot - 基於SpringBoot + Vue3的前後端快速開發腳手架
- AgileBoot - 手把手一步一步帶你Run起全棧專案(SpringBoot+Vue3)
- AgileBoot - 專案內統一的錯誤碼設計
- AgileBoot - 如何整合內建資料庫H2和內建Redis
- 持續輸出中
最後
本專案的目標是做一款精簡可靠,程式碼風格優良,專案規範的小型開發腳手架。
適合個人開發者的小型專案或者公司內部專案使用。也可作為供初學者學習使用的案例。
希望大佬們有興趣的話~ 可以一起來完善這個專案,讓這個專案更規範,程式碼更好維護,真正成為一款能作為生產直接使用的開源專案。
PS: 鄙人前端小白,僅在對應的ruoyi原版前端專案上做了大概50%的重構。能力有限,有沒有前端大佬一起來重構一下前端專案呀~~ 目前打算改成TS。
全棧技術交流群:1398880