系列目录

一.  创建项目并集成swagger

  1.1 创建

  1.2 完善

二. 搭建项目整体架构

三. 集成轻量级ORM框架——SqlSugar

  3.1 搭建环境

  3.2 实战篇:利用SqlSugar快速实现CRUD

  3.3 生成实体类

四. 集成JWT授权验证


本来打算将搭建项目架构和集成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;
}
}
}

BaseDB类

BaseDBConfig用于存放数据库的配置信息,比如数据库连接字符串(这些配置信息还可以分离出来,存放到主项目的json文件中,以供读写,这个后面提出一章专门讲)。

namespace RayPI.Model
{
public class BaseDBConfig
{
public static string ConnectionString = "server=.;uid=sa;pwd=Admin;database=RayPI";
}
}

BaseDBConfig

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

MessageModel

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

TableModel

(七)SqlSugar层

这一层并不是搭建出来的,而是从github引用的源码。

SqlSugar是一个开源的ORM框架,可以实现度数据库灵活方便的操作。如果你选择不引用源码,而是利用Nuget导包的方式向项目引入,那么项目里就没有这一层。

关于引入并配置SqlSugar下一章再讲~

具体可以参考下面的源码

源码下载地址:点击获取下载地址

到目前为止,项目架构相比第一章已经有点模样了。

下一章我们就开始讲继承“轻量级”的ORM框架——SqlSugar,并且利用它实战地编写一个简单完整的接口。

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

  1. 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  2. 【从零开始搭建自己的.NET Core Api框架】(四)实战!带你半个小时实现接口的JWT授权验证

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  3. 【从零开始搭建自己的.NET Core Api框架】(一)创建项目并集成swagger:1.1 创建

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  4. 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  5. 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  6. 【从零开始搭建自己的.NET Core Api框架】(六)泛型仓储的作用

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  7. 从零开始搭建自己的.NET Core Api框架-1目录

    https://www.cnblogs.com/RayWang/p/9216820.html 系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. ...

  8. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. 基于.Net Core的API框架的搭建(1)

    目标 我们的目标是要搭建一个API控制器的项目,API控制器提供业务服务. 一.开发框架搭建 1.开发前准备 开发前,我们需要下载如下软件,安装过程略: (1) 开发工具:VS2017 (2) 数据库 ...

随机推荐

  1. python3 切片

    一.切片的目的:获取多个元素 能够进行切片的对象有:字符串.列表.元组 语法:  object[start_index:end_index:step]     以下是创建一个列表 a = [0,1,2 ...

  2. tensorflow Tensorboard2-【老鱼学tensorflow】

    前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf ...

  3. docker容器时间与宿主机时间不一致问题

    该问题是宿主机和容器时去不一致导致的. 把本机时区复制到宿主机即可: docker cp /etc/localtime a9c27487faf4:/etc/localtime 然后重启容器.

  4. CentOS 7.0开放指定端口

    >>> CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 systemctl stop firewalld.ser ...

  5. codeforces1152 div2

    比赛的链接 C gcd(a+k, b+k) == gcd(a+k, b-a) #include <bits/stdc++.h> using namespace std; const int ...

  6. MonggoDB(二)

    分组聚合 如果你有数据存储在MongoDB中,你想做的可能就不仅仅是将数据提取出来这么简单,可能需要对数据进行分析并加以利用. 聚合框架:可以使用多个构件创建一个管道,上一个构件的结果传给下一个构件. ...

  7. 使用HttpClient发送文件流到服务器端

    适用场景:网络绝对路径的URL文件或图片,不存储到本地,转换成stream,直接使用HTTPClient传送到SpringBoot的服务端,将文件存储下来,并返回一个文件地址.目前分层架构的系统越来越 ...

  8. Linux网络文件系统的实现与调试

    NFS协议 NFS (网络文件系统)不是传统意义上的文件系统,而是访问远程文件系统的网络协议.整个NFS服务的TCP/IP协议栈如下图所示,NFS是应用层协议,表示层是XDR,会话层是RPC,传输层同 ...

  9. Hive管理表,外部表及外部分区表的深入探讨

    Hive管理表,也叫内部表.Hive控制着管理表的整个生命周期,默认情况下Hive管理表的数据存放在hive的主目录:/user/hive/warehouse/下,并且当我们删除一张表时,这张表的数据 ...

  10. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习5

    #include <iostream> using namespace std; const double N1=35000; const int N2=15000; const int ...