.Net Core3.0 WebApi 項目框架搭建 五:倉儲模式


.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; }
    }
}
MessageModel
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; }

    }
}
PageModel
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; }
    }
}
TableModel

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM