【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构
系列目錄
一.? 創(chuàng)建項(xiàng)目并集成swagger
1.1 創(chuàng)建
1.2 完善
二.?搭建項(xiàng)目整體架構(gòu)
三. 集成輕量級(jí)ORM框架——SqlSugar
3.1 搭建環(huán)境
3.2 實(shí)戰(zhàn)篇:利用SqlSugar快速實(shí)現(xiàn)CRUD
3.3 生成實(shí)體類
四. 集成JWT授權(quán)驗(yàn)證
?
?
?
本來(lái)打算將搭建項(xiàng)目架構(gòu)和集成SqlSugar放在一起講的,但是感覺(jué)東西有點(diǎn)多,還是分成兩章吧~
這一章講搭建項(xiàng)目的整體架構(gòu),這里先把搭建完成后的最終效果放出來(lái),然后再逐個(gè)解釋每層的作用。
?
可以看到這里一共有七層,源碼在最下面,需要的可以下載源碼進(jìn)行對(duì)照。
下面我按照自頂層向底層的順序介紹,所以和圖片列出的順序有點(diǎn)區(qū)別。
?
(一)RayPI 主項(xiàng)目層
我在控制器文件夾下添加了兩個(gè)文件夾,Admin和Client,分別用來(lái)存放后臺(tái)和前臺(tái)的接口。
這么做主要有兩個(gè)理由,一個(gè)是我覺(jué)得這樣可以把后臺(tái)和前臺(tái)的功能、權(quán)限分的清楚些;
第二個(gè)是,后面我們要試著讓我們的框架可以自動(dòng)生成一些必備的代碼,以減少重復(fù)的工作量。這些代碼主要是增刪改查的基礎(chǔ)功能,我會(huì)將它們自動(dòng)生成到admin里(畢竟對(duì)后臺(tái)來(lái)說(shuō),每個(gè)實(shí)體都會(huì)涉及到增刪改查,這是跑不了的)。
控制器層除了偶爾會(huì)做一些參數(shù)是否為空的驗(yàn)證外(有人認(rèn)為驗(yàn)證也不應(yīng)該在控制器層做,因人而異),其他不做任何操作,只是將參數(shù)傳給下一層業(yè)務(wù)邏輯層處理。
所以除了接口的注釋信息、接口路徑、方法和權(quán)限等一些用于設(shè)置的代碼外,這一層就不應(yīng)該有其他任何亂糟糟的代碼了~
?
(二)RayPI.Bussiness 業(yè)務(wù)邏輯層
?
我在業(yè)務(wù)邏輯層也就分成了Admin和Client兩塊,分別用來(lái)處理前后臺(tái)的業(yè)務(wù)邏輯。該層只做業(yè)務(wù)邏輯的相關(guān)運(yùn)算,不會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何直接的操作。
業(yè)務(wù)邏輯層接收到控制器層傳遞的參數(shù)后,將這些參數(shù)做相應(yīng)的處理,然后將加工后的參數(shù)傳給下一層:數(shù)據(jù)接口層。(按照比較簡(jiǎn)單的三層架構(gòu)思想,其實(shí)應(yīng)該直接傳給數(shù)據(jù)層,但是這里利用數(shù)據(jù)接口層做了一個(gè)分隔,好處后面慢慢就會(huì)發(fā)現(xiàn)了)
?
(三)RayPI.IService 數(shù)據(jù)接口層
?
該層為數(shù)據(jù)接口層,里面只羅列了相應(yīng)的接口函數(shù),但是具體的函數(shù)功能實(shí)現(xiàn)則交給繼承該數(shù)據(jù)接口的數(shù)據(jù)層來(lái)實(shí)現(xiàn)。
這樣做的好處是可以將數(shù)據(jù)庫(kù)操作與代碼邏輯操作分離的更加清晰。
不論是編寫(xiě)代碼還是閱讀代碼,我們?cè)诓僮鳂I(yè)務(wù)邏輯層時(shí)只需要知道我們調(diào)用的數(shù)據(jù)接口的功能即可,但是這個(gè)功能的具體實(shí)現(xiàn)則暫時(shí)不需要考慮;
當(dāng)我們編寫(xiě)或閱讀數(shù)據(jù)層時(shí),只需要考慮是否實(shí)現(xiàn)了繼承的數(shù)據(jù)接口的功能,而不需要再往上去看業(yè)務(wù)邏輯層。
?
(四)RayPI.Service 數(shù)據(jù)層
?
該層負(fù)責(zé)直接或者間接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,如果你是用原生的或者類似Dapper的數(shù)據(jù)庫(kù)中間件,那么在這一層就會(huì)看到相應(yīng)的sql語(yǔ)句(當(dāng)然,這里我們選擇了集成SqlSugar作為數(shù)據(jù)庫(kù)操作中間件,下一章講)。
該層繼承了相應(yīng)的數(shù)據(jù)接口,所以必須實(shí)現(xiàn)接口內(nèi)的所有函數(shù)。
圖片上可以看到它還繼承了一個(gè)類,叫BaseDB,這個(gè)類是我自己添加的幫助類,在待會(huì)兒要講的Model層里,類里只有一個(gè)函數(shù)叫GetClient(),用來(lái)返回SqlSugarClient類(這個(gè)是SqlSugar集成的類,下一章具體講)。
?
(五)RayPI.Entity 實(shí)體層
該層為實(shí)體類層,存儲(chǔ)了數(shù)據(jù)庫(kù)對(duì)應(yīng)的所有實(shí)體,實(shí)體一般和數(shù)據(jù)庫(kù)表是一一對(duì)應(yīng)的。
?
(六)RayPI.Model 模型層
該層存放了一些系統(tǒng)幫助類,或是實(shí)體輔助類。
BaseDB用于返回SqlSugar的SqlSugarClient類,數(shù)據(jù)層一般直接繼承該類。
using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace RayPI.Model {public class BaseDB{public static SqlSugarClient GetClient(){SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = BaseDBConfig.ConnectionString,DbType = DbType.SqlServer,IsAutoCloseConnection = true});db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));Console.WriteLine();};return db;}} } BaseDB類BaseDBConfig用于存放數(shù)據(jù)庫(kù)的配置信息,比如數(shù)據(jù)庫(kù)連接字符串(這些配置信息還可以分離出來(lái),存放到主項(xiàng)目的json文件中,以供讀寫(xiě),這個(gè)后面提出一章專門(mén)講)。
namespace RayPI.Model {public class BaseDBConfig{public static string ConnectionString = "server=.;uid=sa;pwd=Admin;database=RayPI";} } BaseDBConfigMessageModel是一個(gè)泛型的返回類,用于格式化的向接口返回?cái)?shù)據(jù)。
using System; using System.Collections.Generic; using System.Text;namespace RayPI.Model {/// <summary>/// 通用返回信息類/// </summary>public class MessageModel<T>{/// <summary>/// 操作是否成功/// </summary>public bool Success { get; set; }/// <summary>/// 返回信息/// </summary>public string Msg { get; set; }/// <summary>/// 返回?cái)?shù)據(jù)集合/// </summary>public List<T> Data { get; set; }} } MessageModelTableModel也是一個(gè)返回類,用于格式化的向接口返回列表格式的數(shù)據(jù)。
using System; using System.Collections.Generic; using System.Text;namespace RayPI.Model {/// <summary>/// 表格數(shù)據(jù),支持分頁(yè)/// </summary>public class TableModel<T>{/// <summary>/// 返回編碼/// </summary>public int Code { get; set; }/// <summary>/// 返回信息/// </summary>public string Msg { get; set; }/// <summary>/// 記錄總數(shù)/// </summary>public int Count { get; set; }/// <summary>/// 返回?cái)?shù)據(jù)集/// </summary>public List<T> Data { get; set; }} } TableModel?
(七)SqlSugar層
這一層并不是搭建出來(lái)的,而是從github引用的源碼。
SqlSugar是一個(gè)開(kāi)源的ORM框架,可以實(shí)現(xiàn)度數(shù)據(jù)庫(kù)靈活方便的操作。如果你選擇不引用源碼,而是利用Nuget導(dǎo)包的方式向項(xiàng)目引入,那么項(xiàng)目里就沒(méi)有這一層。
關(guān)于引入并配置SqlSugar下一章再講~
?
具體可以參考下面的源碼
源碼下載地址:點(diǎn)擊獲取下載地址
?
到目前為止,項(xiàng)目架構(gòu)相比第一章已經(jīng)有點(diǎn)模樣了。
下一章我們就開(kāi)始講繼承“輕量級(jí)”的ORM框架——SqlSugar,并且利用它實(shí)戰(zhàn)地編寫(xiě)一個(gè)簡(jiǎn)單完整的接口。
轉(zhuǎn)載于:https://www.cnblogs.com/RayWang/p/9221484.html
總結(jié)
以上是生活随笔為你收集整理的【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么用手机设置迅捷路由器 手机如何设置迅
- 下一篇: asp.net core 自定义401和