- 引言
- 簡介
- 環境搭建
- 開發環境要求:
- 基礎資料庫構建:
- 資料庫設計規范
- 運行
- 使用教程
- 系統配置
- 快速開發
- 管理員登錄
- 系統用戶管理
- 系統角色管理
- 權限管理
- 介面秘鑰管理
- 系統日志
- 操作日志
- 事務使用
- 讀寫分離分庫分表
- 常見疑問
- 如何進行聯表查詢
- 如何切換資料庫型別
- 如何使用多個資料庫
- 結語
引言
時間真快,轉眼今年又要過去了,回想今年,依次開源發布了Colder.Fx.Net.AdminLTE(254Star)、Colder.Fx.Core.AdminLTE(335Star)、DotNettySocket(82Star)、IdHelper(47Star),這些框架及組件都是本著以實際出發,實事求是的態度,力求提高開發效率(我自己都是第一個使用者),目前來看反響不錯,但是隨著前端和后端技術的不斷變革,尤其是前端,目前大環境已經是前后端完全分離為主的開發模式,在這樣的大環境和必然趨勢之下,傳統的MVC就顯得有些落伍了,在這樣的背景下,一款前后端分離的.NET開發框架就顯得尤為必要,由此便定了框架的升級目標:前后端分離,
首先后端技術的選擇,從目前的資料來看,.NET Core的發展遠遠快于.NET Framework,最簡單的分析就是Colder.Fx.Core.AdminLTE發布比Colder.Fx.Net.AdminLTE晚,但是星星卻后來居上而且比前者多30%,并且這個差距在不斷擴大,由點及面的分析可以看出我們廣大.NET開發人員學習的熱情和積極向上的態度,并不是某些人所認為的那么不堪(走自己的路,讓別人說去吧),大環境上微軟積極擁抱開源,大力發展.NET Core, 可以說前途一片光明,因此后端決定采用 .NET Core3.1 ,不再浪費精力去支持.NET Framework,
然后是前端技術選擇,首選是三大js框架選擇,也是從實際出發,Vue相對其它而言更加容易上手,并且功能也毫不遜色,深得各種大小公司喜歡,如果偏要說缺點的話,那就是對TS支持不行,但是即將發布Vue3.0肯定會改變這一缺陷,選擇了Vue之后,然后就是UI框架的選擇了,這里的選擇更多了,我選擇了Ant Design Vue,理由便是簡潔方便,十分符合我的設計理念,
技術選型完畢之后便進入研發,由于鄙人前端比較菜,因此需要從頭學Vue2.x全家桶,從開始到現在差不多經歷3個月,在預期之內,其實學習并使用前端的Vue2.x全家桶并不難,還是比較容易上手的,所以在此給沒有前后端分離開發經驗的老哥打一記預防針,不要退縮,要知難而上,學習永無止境,
某些老哥可能比較直接粗暴,嫌我BBB嘮叨,下面直接上地址
代碼(GitHub):https://github.com/Coldairarrow/Colder.Admin.AntdVue
檔案(GitHub):https://github.com/Coldairarrow/Colder.Admin.AntdVue/wiki
代碼(碼云鏡像):https://gitee.com/Coldairarrow/Colder.Admin.AntdVue
檔案(碼云鏡像):https://gitee.com/Coldairarrow/Colder.Admin.AntdVue/wikis
在線預覽地址:http://coldairarrow.gitee.io/coler.antdvue.preview
由于服務器是阿里云的86服務器,帶寬1M小水管,因此將前端部署到碼云上了,在此多謝碼云,后端部署在阿里云86服務器CentOS7上,整個技術堆疊使用.NET Core + PostggreSQL+ Ant Design Vue + CentOS7+Nginx+Dokcer+jenkins,囊括了從快速開發到自動化部署一條龍,開源免費并具有高性能、高移植性、高拓展性(小公司創業選型+個人接單利器)
簡介
本框架為.NET Core3.1+Ant Design Vue版
本框架旨在極大的提高開發效率
使用技術堆疊:
后端:采用.NET Core平臺,ASP.NET Core3.1,C#語言(使用反射等高級技術),Entity FrameworkCore(資料庫ORM框架),
使用資料倉儲模式,抽象化資料庫操作(CRUD等)、支持事務處理以及分布式事務處理(跨庫)
支持資料庫讀寫分離、分庫分表及事務(僅支持單表操作,不支持多表) 全面采用Autofac作為IOC容器,面向介面編程,全面解耦
集成多種工具類別庫以及操作拓展
資料庫:支持SqlServer,PostgreSQL,MySQL,Oracle(框架使用簡單工廠,工廠方法,抽象工廠,可輕松更換資料庫),Redis作為分布式快取
前端:Vue2.x全家桶+Ant Design Vue,其中集成常用組件,力求方便專案開發,
具體技術實施:
專案采用前后端完全分離模式,并采用嚴格分層模式,極大的增加聚合度,降低耦合度,
提高代碼的健壯性,可維護性,
前后端通過JWT進行身份驗證,通過資料介面操作資料,統一使用JSON作為資料格式,并使用默認介面簽名演算法保證介面的安全性,
功能架構部分詳解:
快速開發:此功能為框架的核心,通過選擇資料庫中的表,就能自動生成對應的物體層、業務邏輯層、控制器、前端頁面Vue檔案,無需撰寫代碼即可生成基本的CRUD操作,
介面密鑰管理:管理介面的密鑰,若開啟介面簽名的規則,則前端需要通過給介面簽名才能夠正常訪問后臺介面,
權限管理:使用基本的RBAC權限控制,支持操作權限、介面權限以及資料權限
框架主要功能及特色如下
| 功能 | 詳細描述 |
|---|---|
| 用戶登錄 | 用戶登錄、密碼修改 |
| 系統用戶管理 | 系統用戶管理 |
| 角1色管理 | 角色管理 |
| 部門管理 | 部門管理、天然多級 |
| 權限管理 | 使用RBAC權限體系,基于角色的權限管理,支持選單權限、操作權限(按鈕權限)、介面權限、資料權限 |
| 系統日志 | 支持多彩控制臺、檔案、資料庫和ElasticSearch記錄日志,框架全域例外自動捕捉,多級別記錄 |
| 快速開發 | 通過資料庫直接生成物體層、業務邏輯層、控制器層以及前端頁面Vue代碼,無需編碼即可實作CURD |
| 資料庫操作封裝 | 使用基于EF的倉儲模式、封裝常用的CURD,支持單庫事物和分布式事物 |
| 多資料庫支持 | 使用基于EF的倉儲模式,支持各大主流關系型資料庫(SQLServer、MySQL、PostgreSQL和Oracle) |
| 超強移植性 | 使用抽象工廠封裝資料庫操作層,切換資料庫0代碼修改 |
| 支持軟洗掉 | 一鍵切換洗掉模式,支持物理洗掉和軟洗掉,對業務操作透明 |
| 快取支持 | 支持系統自帶快取和Redis快取、封裝操作介面、簡單易用 |
| 前后端完全分離 | 前端使用Vue2.x全家桶+Ant Design Vue,界面簡潔美觀,組件化開發 |
| 集成JWT驗證 | 框架使用JWT作為身份驗證,擺脫Cookie苦海,分布式拓展毫無壓力 |
| 集成對外介面簽名演算法 | 框架對外介面可以開啟超強嚴格簽名校驗(防抵賴、防偽造、防重復呼叫),保障系統安全性 |
| 頁面回應式 | 前端為單頁應用,無iframe,各大主流瀏覽器支持友好 |
| 拓展 | 其它各種幫助類別庫及插件 |
其相關版本請看下表:
| .NET版本 | 前端UI | 地址 |
|---|---|---|
| Core3.1 | Ant Design Vue | https://github.com/Coldairarrow/Colder.Admin.AntdVue |
| Core2.2 | AdminLTE | https://github.com/Coldairarrow/Colder.Fx.Core.AdminLTE |
| .NET4.72 | AdminLTE | https://github.com/Coldairarrow/Colder.Fx.Net.AdminLTE |
| .NET4.52 | Easyui | https://github.com/Coldairarrow/Coldairarrow.Fx.Net.Easyui.GitHub |
| Core2.1 | Easyui | https://github.com/Coldairarrow/Coldairarrow.Fx.Core.Easyui.GitHub |
| .NET4.0 | Easyui | https://github.com/Coldairarrow/Coldairarrow.Fx.Net40.Easyui.GitHub |
后臺效果展示如下:

環境搭建
開發環境要求:
作業系統:Windows 10
后端開發工具:Visual Studio 2019+
前端開發工具:Visual Studio Code,安裝nodejs,yarn
SDK:安裝.NET Core SKD 3.0 及以上
資料庫:SQLServer2008 R2及以上
基礎資料庫構建:
-
資料庫創建
目錄"/docs/初始化檔案"中有所需的資料庫資料

先手動創建資料庫,然后執行對應的SQL腳本即可 -
連接字串配置
打開src目錄下Colder.Admin.AntdVue的解決方案,如下圖

如下圖所示依次展開05.Coldairarrow.Api/appsettings.json,配置資料庫連接字串,name不用修改,connectionString改為上述創建的資料庫(若不清楚資料庫連接字串請自行百度搜索教程)

資料庫設計規范
由于本框架支持自動生成代碼的核心功能,此功能是根據資料庫的表結構來生成代碼的
因此規定每張表都有一個主鍵,列名為Id,型別為字串,實際添加資料時默認使用SnowflakeId(雪花Id,Twitter設計的分布式趨勢自增Id,若不清楚請自行百度相關資料),表中的每個列都需要有描述資訊(建議這樣操作,若不按照這個標準則需要一些額外的改動才能夠成功運行),每張表都需要Id、CreateTime、CreatorId這幾個必帶欄位

運行
后端:打開解決方案=>還原nuget包=>配置資料庫=>運行(05.Coldairarrow.Api設為啟動專案)
后臺成功運行后會自動打開swagger

前端: 確保已安裝nodejs和yarn
用VS Code 打開檔案夾src\Coldairarrow.Web

輸入命令:yarn
輸入命令:yarn run serve
成功運行后即可打開登錄頁面

輸入賬號:Admin,密碼:123456進入后臺主頁

使用教程
系統配置
在05.Coldairarrow.Api/appsettings.json中配置了系統的必要引數,其中包括資料庫型別、連接字串、日志配置等,具體配置參考注釋
快速開發
此功能為本框架的核心功能,能夠自動生產完整的可運行代碼,具體使用如下:
- 配置資料源
首選需要有資料庫源,因為代碼生成是根據資料庫表來生成的,
選單:開發=>資料庫連接

若串列中沒有目標資料源,則添加資料庫連接

資料連接名、連接字串、資料庫型別即可,添加完成后即可看到連接字串資訊,
- 生成代碼
有了資料庫連接之后,即可進行代碼生成,
選單:開發=>代碼生成

選擇資料庫,然后勾選需要生成代碼的資料庫表,點擊生成代碼會彈出生成選項(這里演示勾選 Base_BuildTest,其余表全是系統基礎表,不要勾選,否則會被覆寫,導致例外,請勾選自己的業務表進行生成):

生成選項中可以選擇需要生成的型別,默認生成全部:物體層、業務層、介面層(即控制器)和頁面(Vue前端頁面代碼),
生成區域請輸入業務模塊名(例如系統叫Base_Manage),請按具體業務填入(必填)
這里示例填寫TestManage,點擊生成按鈕,即可完成代碼生成,生成后的代碼在專案解決方案中,將代碼檔案包括進入專案
默認生成后的檔案會被自動包括到解決方案中,若沒有則需要點擊顯示所有檔案按鈕,即可看到生成后的新檔案
生成的物體層、業務邏輯層、控制器層代碼:

前端生成的代碼:

后端代碼添加后需要重新編譯下(F7),編譯后好可以看到有新的介面

前端生成代碼后會自動保存并編譯(別的檔案修改保存也會自動編譯,畢竟編譯一次挺慢的),不放心可以Ctrl+C停止,然后再yarn run serve重新運行
代碼生成完畢,但是要展示到選單上需要進行配置,并且所有業務選單都是動態的(權限控制)
打開選單:系統管理=>權限管理=>新建


選單名:即需要顯示的選單名
上級選單:選單是多級樹狀的,可以放在某個選單下面
型別:可以選擇選單或頁面,這里是具體的頁面,所以選頁面
路徑:頁面的路徑,選單可以不配置,這里配置為/TestManage/Base_BuildTest/List,這里設定規則為:views檔案夾為根路徑(即"/"),向下展開依次為/TestManage/Base_BuildTest/List,最后真正的串列頁為List.vue檔案,表單頁為EditForm.vue檔案
是否需要權限:若為“否”,則此頁面不限制權限,即所有人都能看
圖示:選單顯示圖示,具體到開發=>圖示選擇頁進行選擇
排序:若需要需要對選單進行排序則設定,默認0,型別為int
頁面權限:頁面擁有的權限(權限值唯一,作為操作權限即介面權限的依據),詳見權限管理
確認保存,然后重繪整個頁面(F5),即可看到全新生成的選單“生成測驗”



整個代碼生成程序,無需撰寫代碼即可完成一張表的CRUD,當然需要根據具體業務中進行相應的修改,本次示例中欄位比較少,但是當一張表的欄位很多時,那么此功能能夠將開發效率提高幾個檔次,
管理員登錄

默認超級管理員賬號為:Admin
密碼為:123456
系統用戶管理
管理系統登錄的用戶
選單:系統=>用戶管理
點擊右側設定權限
系統角色管理
管理系統角色,角色是權限的載體,合理分配角色有利于權限管理
選單:系統=>角色管理
操作中可以設定角色的權限,詳情見<權限管理>模塊
權限管理
一般情況下,后臺管理系統多少會涉及權限管理,因此本框架提供了一個靈活、高效、簡潔的權限管理系統,
首先,權限分為兩種,即操作權限和資料權限,其中操作權限主要包括選單權限和按鈕權限,在角色編輯表單中,給角色勾選需要的權限即可,用戶可以分配多個角色,繼承所有角色的權限,

如上圖,按需勾選,有人會疑問為什么只有增、改和刪的權限而沒有查的權限,其實這里考慮到了當勾選“用戶管理”時,就已經默認擁有“查”的權限了,這里再設定“查”權限豈不是多此一舉,可以根據實際業務需求添加諸如申請、審核等權限,靈活應用,
這里的樹狀是和選單一一對應的,勾選哪些選單就擁有哪些選單
下面介紹下最常用的按鈕權限

如上圖,在需要控制權限的按鈕使用v-if="hasPerm('Base_User.Add')",表示只有當用戶擁有權限值Base_User.Add才顯示此按鈕,權限值就是權限表單中配置的權限值
這里的按鈕級權限控制只能夠在前端控制操作入口,若系統對安全性要求較高,則需要控制介面權限

如上圖,在需要權限控制的介面加上ApiPermission特性即可,引數也為權限值,只有擁有此權限才能訪問此介面
資料權限比較復雜,若采用純SQL方式,那么會更加復雜,本框架全程采用EF作為ORM框架,通過對IQueryable< T >進行過濾,即可完成資料權限控制,詳細使用方式見用戶管理,
更詳細的使用方式,請參考源代碼中的用戶管理模塊(選單權限、操作權限、資料權限、聯表查詢、業務層AOP等使用方式均可參考此模塊),
介面秘鑰管理
作為對外介面簽名的AppId和AppSecret管理
選單:系統=>介面秘鑰管理
系統日志
選單:系統=>系統日志
操作日志
選單:系統=>操作日志
事務使用
系統采用AOP管理事務,使用十分簡單,只需要在需要事務包裹的方法中添加Transactional特性,無需任何其他處理,系統會自動捕捉例外并回滾,而且支持多庫事務(即使用多個不同的IRepository也會在同一個事務中處理)

讀寫分離分庫分表
系統采用EFCore.Sharding組件,具體使用方式請移步EFCore.Sharding
常見疑問
如何進行聯表查詢
框架使用EF+LINQ進行聯表操作,核心在于對IQueryable< T >的使用,另可網上搜EF+LINQ的相關教程,
示例如下:
Base_User表左連接Base_Department表獲取DepartmentName屬性
//定義資料模型類
public class Base_UserTestDTO : Base_User
{
public string DepartmentName { get; set; }
}
//即BaseBusiness中的Service
var db = DbFactory.GetRepository();
Expression<Func<Base_User, Base_Department, Base_UserTestDTO>> select = (a, b) => new Base_UserTestDTO
{
DepartmentName = b.Name
};
select = select.BuildExtendSelectExpre();
var q = from a in db.GetIQueryable<Base_User>().AsExpandable()
join b in db.GetIQueryable<Base_Department>() on a.DepartmentId equals b.Id into ab
from b in ab.DefaultIfEmpty()
select @select.Invoke(a, b);
//篩選
var where = LinqHelper.True<Base_UserTestDTO>();
where = where.And(x => x.UserName == "Admin");
//獲取篩選資料
var list = q.Where(where).ToList();
原始碼可參考Base_UserBusiness.GetDataList
如何切換資料庫型別
修改05.Coldairarrow.Api/appsettings.json中的DatabaseType
修改相應的資料庫連接字串
安裝相應的資料庫Nuget包
注意:若使用Oracle,只能使用2.x版本的包(EFCore.Sharding也要降級為2.x),因為EF Core3.x版本暫不支持Oracle,其余版本資料庫使用最新版即可


如何使用多個資料庫
默認框架會自動注入IRepository作為資料庫訪問介面,在需要的時候注入即可,若系統需要操作多個資料庫,那么需要定義額外的介面繼承IRepository然后配置注入進去即可訪問
-
先定義新的介面IMyRepository

-
然后配置資料庫型別和連接字串

-
使用IMyRepository

這樣就可以在任何地方注入并使用IMyRepository,更多資料庫同理配置即可
結語
歡迎使用本框架,若覺得不錯,請比心

Github歡迎星星:https://github.com/Coldairarrow
博客園歡迎點贊:https://www.cnblogs.com/coldairarrow/
QQ群3:940069478
個人QQ:862520575(歡迎技術支持及商務合作,提供.NET Core + Linux + Nginx+ jenkins + git整套持續集成快速開發平臺)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/93303.html
標籤:.NET Core
下一篇:[視頻演示].NET Core開發的iNeuOS物聯網平臺,實作從設備&PLC、云平臺、移動APP資料鏈路倍訓
