一、說明
在2.0的架構設計中引用了插件式開發
的概念,將功能模塊插件化,以實現更清晰的目錄結構,更靈活的解決方案,減少代碼的臃腫性。隨着2.0版本的使用,也隨之暴露出一些問題,之前講究的插件化並沒有完全的實現插件化,我理想的插件化應該是需要某個業務或者功能模塊,直接引用該項目既可,不需要進行額外的操作,而現在我們引用了一個業務或者功能模塊,還需要一些額外的操作,比如需要把實體放置在Sqlsugar插件中,種子數據放置在CodeFisrs插件中,這樣顯然並沒有達到插件式開發
的目的。也不是我想要的結果。因爲接下來準備移動端業務的開發,但是又不想把移動端的業務放置在主工程中,因爲不是所有用戶都需要,所以決定對現有的架構進行升級優化,實現真正插件化,每一個插件都是獨立的,包含實體、種子數據和service類等,主項目需要的時候只需要引用到項目中來就行了。以下是2.1架構設計的一些優化:
真·插件式開發
:實現真正的插件式開發,每一個功能/業務模塊都是獨立的,可以獨立生成種子數據和初始化表,不需要動其他項目。將批量修改和導入導出插件合併到system層
:這兩個插件本應都是系統層的功能,之前分出來是覺得好維護,後來發現分的太細了還是合到system層好點。Cache和SqlSugar插件移除改爲架構核心
:理論上Cache和Sqlsugar不能算插件,而是系統基礎於是就移到了架構核心
模塊。
二、項目結構
2.1的項目結構項目和2.0沒啥太大變化,只是調整了項目位置和項目分層。
三、分層說明
3.1 架構核心
SimpleAdmin.Core->核心層
核心層,公共組件,常量,枚舉,通用方法等其他核心代碼,可以被任何項目引用,不依賴其他項目。
│ Core.Development.json --> 開發環境配置
│ Core.Production.json --> 生產環境配置
│ Startup.cs --> 啓動類
├─Attributes --> 特性
├─BaseInput --> 共用輸入參數(分頁,ID傳參等)
├─Components --> 公共組件
├─Const --> 常量
├─Dto --> 數據類
├─Enum --> 枚舉類
├─Extension --> 拓展
├─Options --> 配置轉實體選項
├─UnifyResult --> 統一返回結果
└─Utils --> 工具類(驗證碼,圖片處理,種子數據處理等)
SimpleAdmin.Cache->緩存層
緩存層,系統核心之一,用來存儲用戶信息和認證信息和一些常用的數據庫數據,支持MemeryCache
和Redis
│ Cache.Development.json --> 開發環境配置
│ Cache.Production.json --> 生產環境配置
│ Startup.cs --> 啓動類
├─Const --> 常量
├─Inerface --> 接口
├─Options --> 配置轉實體選項
├─Service --> 實現接口的服務類,分別是memerycache和redis的實現
SimpleAdmin.SqlSugar->ORM層
ORM層基於SqlSugar單例模塊和倉儲模式,將之前的CodeFirst集成到了該層。
│ SqlSugar.Development.json --> 開發環境配置
│ SqlSugar.Production.json --> 生產環境配置
│ Startup.cs --> 啓動類
├─Const --> 常量
├─Db --> SqlSugar配置
├─Dto --> 數據類
├─Entity --> 實體
├─Extension --> 拓展
└─Utils --> 工具類(CodeFirst,種子數據處理等)
3.2 系統插件
3.2.1 核心插件
核心插件通常放置一些系統通用插件.
SimpleAdmin.Core>插件核心
├─Enum --> 枚舉
├─Interface --> 接口
├─Options --> 配置轉實體類
SimpleAdmin.Aop>Aop插件
實現Aop功能的插件,具體使用看Furion文檔
├─Aop --> Aop實現類
├─Attributes --> Aop特性
3.2.2 系統模塊插件
系統模塊插件主要是對應的我們SimpleAdmin.System
層所用到的插件。
SimpleAdmin.Gen>代碼生成器插件
實現系統代碼生成功能
│ Gen.Development.json --> 開發環境配置
│ Gen.Production.json --> 生產環境配置
│ Startup.cs --> 啓動類
├─Const --> 常量
├─Controllers --> 控制器
├─Entity --> 實體
├─Options --> 配置轉實體
└─SeedData --> 種子數據
└─Services --> 服務類
SimpleAdmin.Mqtt>Mqtt插件
實現mqtt通信功能
│ Mqtt.Development.json --> 開發環境配置
│ Mqtt.Production.json --> 生產環境配置
│ MqttComponent.cs --> 組件類
├─Const --> 常量
├─Controllers --> 控制器
└─Services --> 服務類
SimpleAdmin.SignalR>SignalR插件
實現Signalr及時通訊功能
│ SignalRComponent.cs --> 組件類
├─Hub --> Hub類
├─Provider --> ID提供全
└─Service --> 服務類
3.3 業務模塊
SimpleAdmin.System->系統應用層
系統應用層,主要是提供系統應用服務給Api接口層調用,SimpleAdmin的主要功能都由該層實現。
│ Startup.cs --> 啓動類
│ System.Development.json --> 開發環境配置
│ System.Production.json --> 生產環境配置
├─Attributes --> 特性
├─Entity --> 實體
├─EventSubscriber --> 事件總線
├─ExtJson --> 實體中的ExtJson
├─Options --> 配置轉實體類
├─Oss --> 對象存儲
├─Services --> 服務(系統功能接口加實現)
└─UserManager --> 用戶中心(獲取當前請求用戶信息)
SimpleAdmin.Application->業務應用層
業務應用層,主要是業務代碼的編寫,可以將自己的業務寫在該層,當然也可以自己新建一層寫。本系統該層主要是用作數據權限示例。
│ Application.Development.json --> 開發環境配置
│ Application.Production.json --> 生產環境配置
│ Startup.cs --> 啓動類
│ Options --> 配置項轉實體
└─Services --> 服務(業務功能實現)
3.4 應用服務
3.4.1 Web
SimpleAdmin.Web.Entry->啓動層
Web 入口層,主要作用就是作爲程序入口,沒有什麼實際業務,沒啥好講的,主要是一些全局的設置,詳情見appsettings.json
│-- appsettings.json --> 啓動層配置文件
│-- ip2region.db --> 解析ip用的數據庫文件
│-- Program.cs --> 啓動類
SimpleAdmin.Web.Core->WebApi接口層
Api接口層,存放web應用所需要用到的代碼,如組件,控制器,中間件,過濾器等。
│ Startup.cs --> 啓動類
│ Web.Development.json --> 開發環境配置
│ Web.Production.json --> 生產環境配置
├─Components --> 存放Web組件
├─Controllers --> 存放控制器
├─Filter --> 過濾器
├─Handlers --> 處理器
└─Logging --> 操作日誌功能
└─Options --> 配置文件轉實體選項類
3.4.2 後臺服務
SimpleAdmin.Background->後臺服務層
後臺服務層,作爲定時任務,MQTT或其他服務載體常駐於後臺,不依賴於Web,不會因web服務升級而停止。這樣做的好處就是不會被iis內存回收,也不會因爲web服務升級而停止工作。
│ Background.Development.json --> 開發環境配置
│ Background.Production.json --> 生產環境配置
│ MqttWorker.cs --> mqtt後臺任務
│ Program.cs --> 啓動類
├─Dto --> 數據轉換類
四、總結
2.1的架構是2.0的優化版本,實現了真插件式開發,以後需要哪個業務模塊直接引用就行了,爲後面移動端模塊打下了基礎,簡直Nice
.