.Net Core3.0 WebApi 項目框架搭建:目錄
理論介紹
倉儲(Respository)是存在於工作單元和數據庫之間單獨分離出來的一層,是對數據訪問的封裝。其優點:
1)業務層不需要知道它的具體實現,達到了分離關注點。
2)提高了對數據庫訪問的維護,對於倉儲的改變並不會改變業務的邏輯,數據庫可以用Sql Server(該系列博客使用)、MySql等。
基本項目架構
Common
公共組件層,存放一些公共的方法
Model
實體Model數據層,Enity文件夾中,存放的是整個項目的數據庫表實體類,可以手動創建,當然也可以自動創建后面講Sqlsugar會講到。
VeiwModels文件夾,是存放的DTO實體類,在開發中,一般接口需要接收數據,返回數據,如果直接使用實體類返回的話弊端很大,不僅把重要信息暴露出去(比如手機號等),還對數據造成冗余(比如我需要接收用戶的生日,還需要具體的年、月、日這就是三個字段,當然您也可以手動拆開,這只是一個栗子,所以不能直接用數據庫實體類接收),就用到了DTO類的轉換
最后的是MessageModel、TableModel和PageModel.,因為在前端接口中,需要固定的格式,以及操作,不能把數據直接發出去。

namespace Webapi.Core.Model { /// <summary> /// 通用返回信息類 /// </summary> public class MessageModel<T> { /// <summary> /// 狀態碼 /// </summary> public int status { get; set; } = 200; /// <summary> /// 操作是否成功 /// </summary> public bool success { get; set; } = false; /// <summary> /// 返回信息 /// </summary> public string msg { get; set; } = "服務器異常"; /// <summary> /// 返回數據集合 /// </summary> public T response { get; set; } } }

using System.Collections.Generic; namespace Webapi.Core.Model { /// <summary> /// 通用分頁信息類 /// </summary> public class PageModel<T> { /// <summary> /// 當前頁標 /// </summary> public int page { get; set; } = 1; /// <summary> /// 總頁數 /// </summary> public int pageCount { get; set; } = 6; /// <summary> /// 數據總數 /// </summary> public int dataCount { get; set; } = 0; /// <summary> /// 每頁大小 /// </summary> public int PageSize { set; get; } /// <summary> /// 返回數據 /// </summary> public List<T> data { get; set; } } }

using System.Collections.Generic; namespace Webapi.Core.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; } } }
IRepository和 Repository
倉儲層:repository就是一個管理數據持久層的,它負責數據的CRUD(Create, Read, Update, Delete) service layer是業務邏輯層,它常常需要訪問repository層。有網友這么說:Repository(倉儲):協調領域和數據映射層,利用類似與集合的接口來訪問領域對象。Repository 是一個獨立的層,介於領域層與數據映射層(數據訪問層)之間。它的存在讓領域層感覺不到數據訪問層的存在,它提供一個類似集合的接口提供給領域層進行領域對象的訪問。Repository 是倉庫管理員,領域層需要什么東西只需告訴倉庫管理員,由倉庫管理員把東西拿給它,並不需要知道東西實際放在哪。
我們定義了IRepository層,提供了所有的操作接口,這里簡單定義一個測試接口
public interface ITestRepository { /// <summary> /// 求和 /// </summary> /// <param name="i"></param> /// <param name="j"></param> /// <returns></returns> int Sum(int i, int j); }
然后再在 TestRepository.cs 中去實現該接口,記得要添加引用。
public class TestRepository : ITestRepository { public int Sum(int i, int j) { return i + j; } }
IServices和 Service
業務邏輯層,就是和我們平時使用的三層架構中的BLL層很相似。Service層只負責將Repository倉儲層的數據進行調用,至於如何是與數據庫交互的,它不去管,這樣就可以達到一定程度上的解耦,假如以后數據庫要換,比如MySql,那Service層就完全不需要修改即可。
這里在 ITestService 中添加接口
public interface ITestService { /// <summary> /// 求和 /// </summary> /// <param name="i"></param> /// <param name="j"></param> /// <returns></returns> int Sum(int i, int j); } }
然后再在 TestService 中去實現該接口
public class TestServic : ITestService { ITestRepository test = new TestRepository(); public int Sum(int i, int j) { return test.Sum(i, j); } }
創建 Controller 接口調用
新建一個Test控制器
新建Sum接口
using Microsoft.AspNetCore.Mvc; using Webapi.Core.IService; using Webapi.Core.Service; namespace Webapi.Core.Controllers { public class TestController : BaseController { /// <summary> /// 求和 /// </summary> /// <param name="i"></param> /// <param name="j"></param> /// <returns></returns> [HttpGet] public int Sum(int i, int j) { ITestService testService = new TestService(); return testService.Sum(i, j); } } }
F5 運行項目,調試如下:
本章GitHub
https://github.com/huguodong/Webapi.Core/tree/Repository