日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构

發(fā)布時(shí)間:2023/12/2 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

系列目錄

.? 創(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";} } BaseDBConfig

MessageModel是一個(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; }} } MessageModel

TableModel也是一個(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。