SimpleAdmin手摸手教學之:項目架構設計2.1

一、說明

在2.0的架構設計中引用了插件式開發的概念,將功能模塊插件化,以實現更清晰的目錄結構,更靈活的解決方案,減少代碼的臃腫性。隨着2.0版本的使用,也隨之暴露出一些問題,之前講究的插件化並沒有完全的實現插件化,我理想的插件化應該是需要某個業務或者功能模塊,直接引用該項目既可,不需要進行額外的操作,而現在我們引用了一個業務或者功能模塊,還需要一些額外的操作,比如需要把實體放置在Sqlsugar插件中,種子數據放置在CodeFisrs插件中,這樣顯然並沒有達到插件式開發的目的。也不是我想要的結果。因爲接下來準備移動端業務的開發,但是又不想把移動端的業務放置在主工程中,因爲不是所有用戶都需要,所以決定對現有的架構進行升級優化,實現真正插件化,每一個插件都是獨立的,包含實體、種子數據和service類等,主項目需要的時候只需要引用到項目中來就行了。以下是2.1架構設計的一些優化:

  1. 真·插件式開發:實現真正的插件式開發,每一個功能/業務模塊都是獨立的,可以獨立生成種子數據和初始化表,不需要動其他項目。
  2. 將批量修改和導入導出插件合併到system層:這兩個插件本應都是系統層的功能,之前分出來是覺得好維護,後來發現分的太細了還是合到system層好點。
  3. 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->緩存層

緩存層,系統核心之一,用來存儲用戶信息和認證信息和一些常用的數據庫數據,支持MemeryCacheRedis

│  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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章