
序言
AdmBoots 基於.NET Core生態系統最成熟技術體系,借鑒眾多開源項目的優點,旨在打造前后端分離快速開發框架,讓你開發Web管理系統和移動端Api更簡單。
框架對依賴注入、日志、緩存、模型映射、認證/授權、倉儲、健康檢測、ORM,任務調度等模塊進行更高一級的自動化封裝。
📌項目特點:代碼簡潔、易上手、學習成本低、開箱即用
📌適用人群:.NetCore入門同學,正在尋找具有以上特點框架的同學
系列教程
01.NetCore(.Net5)快速開發框架一:前言
02.NetCore(.Net5)快速開發框架二:快速開發
03.NetCore(.Net5)快速開發框架三:WebAPI性能監控-MiniProfiler與Swagger集成
04.NetCore(.Net5)快速開發框架四:實現審計日志
...
架構設計
正在整理中...
功能與技術
采用前后端分離模式,后端基於.Net5平台
前端使用基於React的開源腳手架adv-boot-admin
未來要實現的功能:
- 上兩圖中未完成的功能(圖中未打對號的)
- 持續部署集成
- 重構完善
- 消息隊列
- ...
工程結構
采用DDD領域驅動設計,經典分層結構,系統層次少,分層清晰,對常翻代碼的開發人員十分友好。
如果我們我們的業務是單領域的,那么只需要在Domain層創建model,在Data層寫上一句DbSet<實體名>,在Application層寫上我們的邏輯,在API層公開出去,一個簡單的功能開發就完成了。配上代碼生成器,我們的編碼就更少了,只注重業務本身的開發就可以了。
.
├── AdmBoots.Api # API接口層
| ├── Authorization # 策略授權認證相關
| ├── Controllers # 控制器,對外提供(Restful)接口
| ├── Extensions # ConfigureServices擴展
| ├── Filters # 過濾器
├── AdmBoots.Application # 應用層
| ├── AutoMapProfile.cs # AutoMapper 映射文件
| ├── AppServiceBase.cs # service基類,提供一些常用屬性
| ├── ITransientDependency.cs # 依賴注入繼承接口,繼承此接口可將Application層注入到容器
├── AdmBoots.Data # 基礎設施層-持久化層
| ├── EntityFrameworkCore # EF Core相關
│ │ ├── Repositories # 自定義倉儲寫在這里
│ │ │ ├── SqlExecuterRepository.cs# 通用sql執行器
│ │ ├── Seed # 種子數據
│ │ └── Uow # 工作單元(事務處理)
│ │ └── AdmDbContext.cs # 數據庫上下文
│ │ └── AdmRepositoryBase.cs# 倉儲基類,在大多數的時候,這些方法已足夠應付一般實體的需要
├── AdmBoots.Domain # 領域層
| ├── IRepositories # 倉儲接口
| ├── Models # 模型
├── AdmBoots.Infrastructure # 基礎設施層-通用技術支持
├── AdmBoots.Quartz # 基於Quartz.NET的任務調度
項目初始化
環境要求
- Visual Studio 2019 16.8 +
- .NET 5 SDK +
- MySQL (支持其他庫,詳見EFCore)
- Redise (非必須)
運行系統
初始化服務端
- 首先在GitHub上將代碼Clone下來后,用VS2019打開,第一次打開項目工具會自動安裝系統依賴的Nuget包,靜靜等待即可。如果Nuget包還原失敗,可以在解決方案上右鍵【還原Nuget包】
- 打開API層的 appsetting.json 文件,設置系統啟動的必要配置
a.數據庫配置 -必須
//數據庫連接字符串
"ConnectionStrings": {
"Default": "Server=localhost; Port=3306;Stmt=; Database=admboot; Uid=root; Pwd=root;"
},
//數據庫類型
"Database": {
"Dialect": "mysql",
"Version": "8.0.22" //.Net5 MySQL連接驅動要求提供版本號 https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
},
b.緩存配置 -非必須,如需使用Redis,請配置Redis連接。默認MemoryCache
//Redis配置 Configuration=""時,系統使用MemoryCache
"Redis": {
"Configuration": "", //127.0.0.1:6379
"InstanceName": "AdmBoots"
},
c.日志配置 -非必須,如果需要將日志輸出到數據庫,在Serilog節點需配置對應數據庫連接。默認輸出到文件
//Serilog配置
"Serilog":
"WriteTo": [
{
"Name": "MySQL",
"Args": {
"connectionString": "Server=localhost; Port=3306;Stmt=; Database=admboot; Uid=root; Pwd=root;",
"tableName": "Logs",
"restrictedToMinimumLevel": "Warning"
}
}
]
}
-
初始化種子數據
初始化種子數據分為三種方式
a.第一次運行程序會自動初始化種子數據。public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider provider) { ... //程序第一次運行時初始化數據庫及種子數據, 初始化完畢后,可注銷此處避免每次都做數據庫檢查 app.InitializeDatabase(); ... }
b. 使用Code First遷移命令,這里已為大家生成好遷移文件,打開程序包管理控制台,大家只需要做執行以下命令即可
PM> update-database -Context AdmDbContext
c. sql腳本插入 SQL 文件夾,打開項目根目錄下的,將里面的 AdmBoots_mysql.sql
使用Quartz.Net定時任務功能需手動執行sql文件quartz_mysql.sql (其他數據庫建表腳本https://github.com/quartznet/quartznet/tree/master/database/tables)
-
驗證
啟動項目,出現Swagger頁面,項目初始化成功!Swagger頁面上,如果Controller上有小鎖的標志,表示需要先登錄后才能進行測試驗證。點擊authorize按鈕,輸入admin,a123456登陸。
初始化前端
$ git clone https://github.com/xuke353/AdmBoots-Client.git $ cd AdmBoots-Client // 安裝依賴 $ yarn // 啟動 $ yarn start
啟動成功后(先保證服務端開啟),瀏覽器輸入http://localhost:3000/
最后
這里推薦使用項目啟動方式,項目啟動本質上就是執行了 dotnet run AdmBoots.Api.dll。
<!--AdmBoots.Api.csproj 使用進程外托管-->
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
ASP.NET Core 3.X默認為進程內托管。當配置了OutOfProcess的時候,無論使用iis啟動還是dotnet run啟動都是外進程,使用iis啟動可以理解為iis作為了反向代理,用dotnet run啟動可以視為自己作為內部服務器和反向代理結合使用
下一篇我們講如何 使用該框架進行業務開發,以及權限配置使用,平時比較忙,更新可能不及時,有問題的小伙伴可以先入群
源碼地址
后端:https://github.com/xuke353/AdmBoots
gitee:https://gitee.com/xuke353/AdmBoots
前端:https://github.com/xuke353/AdmBoots-Client
gitee:https://gitee.com/xuke353/AdmBoots-Client