AgileBoot

2022-10-11 06:01:31

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:前端方面是小白,有大佬來一起優化嗎~ 嘿嘿

 

交流群:1398880