Agileboot 1.6.0 釋出啦 - 一款致力於規範/精簡/可維護 的Springboot + Vue3的快速開發腳手架

CoderV的進階筆記發表於2022-12-07

⚡平臺簡介⚡

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

相關文章