.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; } = ;
/// <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; } = ;
/// <summary>
/// 总页数
/// </summary>
public int pageCount { get; set; } = ;
/// <summary>
/// 数据总数
/// </summary>
public int dataCount { get; set; } = ;
/// <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

.Net Core3.0 WebApi 项目框架搭建 五:仓储模式的更多相关文章

  1. .Net Core3.0 WebApi 项目框架搭建 五: 轻量型ORM+异步泛型仓储

    .Net Core3.0 WebApi 项目框架搭建:目录 SqlSugar介绍 SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET C ...

  2. .Net Core3.0 WebApi 项目框架搭建:目录

    一.目录 .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger .Net ...

  3. .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api

    .Net Core3.0 WebApi 项目框架搭建:目录 开发环境 Visual Studio 2019.net core 3.1 创建项目 新建.net core web项目,如果没有安装.net ...

  4. .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger

    .Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...

  5. .Net Core3.0 WebApi 项目框架搭建 三:读取appsettings.json

    .Net Core3.0 WebApi 项目框架搭建:目录 appsettings.json 我们在写项目时往往会把一些经常变动的,可能会变动的参数写到配置文件.数据库中等可以存储数据且方便配置的地方 ...

  6. .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证

    .Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...

  7. 权限管理系统之项目框架搭建并集成日志、mybatis和分页

    前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...

  8. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

  9. 一个基于Net Core3.0的WPF框架Hello World实例

    目录 一个基于Net Core3.0的WPF框架Hello World实例 1.创建WPF解决方案 1.1 创建Net Core版本的WPF工程 1.2 指定项目名称,路径,解决方案名称 2. 依赖库 ...

随机推荐

  1. Apache jena SPARQL endpoint及推理

    一.Apache Jena简介 Apache Jena(后文简称Jena),是一个开源的Java语义网框架(open source Semantic Web Framework for Java),用 ...

  2. HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer

    1 简介 之前文章<Springboot整合https原来这么简单>讲解过一些基础的密码学知识和Springboot整合HTTPS.本文将更深入讲解密钥知识和密钥工具. 2 密钥知识-非对 ...

  3. C#线程学习笔记

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/Thread.html,记录一下学习,方便后面资料查找 一.线程的介绍 进程(Proce ...

  4. 什么是LVM

    LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.前面 ...

  5. Hbase详细架构图解

    @ 目录 主要组件 数据模型 注意:Hbase是依赖zookeeper和hdfs的,需要启动zk和hdfs. 主要组件 Zookeeper: HBase 通过 Zookeeper 来做 Master ...

  6. 面试官:你对Redis缓存了解吗?面对这11道面试题你是否有很多问号?

    前言 关于Redis的知识,总结了一个脑图分享给大家 1.在项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试官心理分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚, ...

  7. 批量查询PDF文本并导出结果的小工具

    效果: 批量查询指定关键字 & 指定目录下PDF文件中的文本,并导出文件路径和关键字所在文本行. 下载: 链接: https://pan.baidu.com/s/1sK2OMMgGX26l7P ...

  8. PHP 新特性:如何善用接口与Trait

    首先! 接口也可以继承,通过使用 extends 操作符. 案例: <?php interface a { public function foo(); } interface b extend ...

  9. PHP Ajax 跨域问题解决方案

    本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.0751.tv,而请求的域名是server.0751.tv. 如果直接使用ajax访问 ...

  10. mysql---3种常用引擎 和优点