系列目錄html
1.1 建立github
1.2 完善sql
二. 搭建項目總體架構數據庫
三. 集成輕量級ORM框架——SqlSugarjson
3.1 搭建環境架構
四. 集成JWT受權驗證ide
原本打算將搭建項目架構和集成SqlSugar放在一塊兒講的,可是感受東西有點多,仍是分紅兩章吧~
這一章講搭建項目的總體架構,這裏先把搭建完成後的最終效果放出來,而後再逐個解釋每層的做用。
能夠看到這裏一共有七層,源碼在最下面,須要的能夠下載源碼進行對照。
下面我按照自頂層向底層的順序介紹,因此和圖片列出的順序有點區別。
(一)RayPI 主項目層
我在控制器文件夾下添加了兩個文件夾,Admin和Client,分別用來存放後臺和前臺的接口。
這麼作主要有兩個理由,一個是我以爲這樣能夠把後臺和前臺的功能、權限分的清楚些;
第二個是,後面咱們要試着讓咱們的框架能夠自動生成一些必備的代碼,以減小重複的工做量。這些代碼主要是增刪改查的基礎功能,我會將它們自動生成到admin裏(畢竟對後臺來講,每一個實體都會涉及到增刪改查,這是跑不了的)。
控制器層除了偶爾會作一些參數是否爲空的驗證外(有人認爲驗證也不該該在控制器層作,因人而異),其餘不作任何操做,只是將參數傳給下一層業務邏輯層處理。
因此除了接口的註釋信息、接口路徑、方法和權限等一些用於設置的代碼外,這一層就不該該有其餘任何亂糟糟的代碼了~
(二)RayPI.Bussiness 業務邏輯層
我在業務邏輯層也就分紅了Admin和Client兩塊,分別用來處理先後臺的業務邏輯。該層只作業務邏輯的相關運算,不會對數據庫進行任何直接的操做。
業務邏輯層接收到控制器層傳遞的參數後,將這些參數作相應的處理,而後將加工後的參數傳給下一層:數據接口層。(按照比較簡單的三層架構思想,其實應該直接傳給數據層,可是這裏利用數據接口層作了一個分隔,好處後面慢慢就會發現了)
(三)RayPI.IService 數據接口層
該層爲數據接口層,裏面只羅列了相應的接口函數,可是具體的函數功能實現則交給繼承該數據接口的數據層來實現。
這樣作的好處是能夠將數據庫操做與代碼邏輯操做分離的更加清晰。
不管是編寫代碼仍是閱讀代碼,咱們在操做業務邏輯層時只須要知道咱們調用的數據接口的功能便可,可是這個功能的具體實現則暫時不須要考慮;
當咱們編寫或閱讀數據層時,只須要考慮是否實現了繼承的數據接口的功能,而不須要再往上去看業務邏輯層。
(四)RayPI.Service 數據層
該層負責直接或者間接對數據庫進行操做,若是你是用原生的或者相似Dapper的數據庫中間件,那麼在這一層就會看到相應的sql語句(固然,這裏咱們選擇了集成SqlSugar做爲數據庫操做中間件,下一章講)。
該層繼承了相應的數據接口,因此必須實現接口內的全部函數。
圖片上能夠看到它還繼承了一個類,叫BaseDB,這個類是我本身添加的幫助類,在待會兒要講的Model層裏,類裏只有一個函數叫GetClient(),用來返回SqlSugarClient類(這個是SqlSugar集成的類,下一章具體講)。
(五)RayPI.Entity 實體層
該層爲實體類層,存儲了數據庫對應的全部實體,實體通常和數據庫表是一一對應的。
(六)RayPI.Model 模型層
該層存放了一些系統幫助類,或是實體輔助類。
BaseDB用於返回SqlSugar的SqlSugarClient類,數據層通常直接繼承該類。
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; } } }
BaseDBConfig用於存放數據庫的配置信息,好比數據庫鏈接字符串(這些配置信息還能夠分離出來,存放到主項目的json文件中,以供讀寫,這個後面提出一章專門講)。
namespace RayPI.Model { public class BaseDBConfig { public static string ConnectionString = "server=.;uid=sa;pwd=Admin;database=RayPI"; } }
MessageModel是一個泛型的返回類,用於格式化的向接口返回數據。
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> /// 返回數據集合 /// </summary> public List<T> Data { get; set; } } }
TableModel也是一個返回類,用於格式化的向接口返回列表格式的數據。
using System; using System.Collections.Generic; using System.Text; namespace RayPI.Model { /// <summary> /// 表格數據,支持分頁 /// </summary> public class TableModel<T> { /// <summary> /// 返回編碼 /// </summary> public int Code { get; set; } /// <summary> /// 返回信息 /// </summary> public string Msg { get; set; } /// <summary> /// 記錄總數 /// </summary> public int Count { get; set; } /// <summary> /// 返回數據集 /// </summary> public List<T> Data { get; set; } } }
(七)SqlSugar層
這一層並非搭建出來的,而是從github引用的源碼。
SqlSugar是一個開源的ORM框架,能夠實現度數據庫靈活方便的操做。若是你選擇不引用源碼,而是利用Nuget導包的方式向項目引入,那麼項目裏就沒有這一層。
關於引入並配置SqlSugar下一章再講~
具體能夠參考下面的源碼
源碼下載地址:點擊獲取下載地址
到目前爲止,項目架構相比第一章已經有點模樣了。
下一章咱們就開始講繼承「輕量級」的ORM框架——SqlSugar,而且利用它實戰地編寫一個簡單完整的接口。