.NetCore3.1前后端分离快速开发框架:开篇

AdmBoots 基于.NET Core3.1 + EF Core3.1最成熟技术体系,借鉴众多开源项目的优点,诣在打造前后端分离快速开发框架,让你开发Web管理系统和移动端Api更简单。

群号:877617006

系统结构

系统采用前后端分离模式,前端使用开箱即用的开源脚手架adv-boot-admin,本篇将重点介绍后端技术体系及使用方法。整体架构如下图

image

技术栈

AdmBoots目前使用技术栈如下,当然这只是.Net 技术体系的冰山一角,后期可能会增加其他技术,比如signalR,简单消息队列等。

  • .Net Core 3.1
  • EF Core3.1 超全的仓储操作封装
  • DDD领域驱动思想
  • Swagger接口文档 支持RESTful
  • AutoMapper DTO映射
  • 工作单元实现 自动事务处理
  • AutoFac 轻量级IoC和DI依赖注入,支持属性注入
  • 简单的跨域解决方案
  • AOP
  • HealthChecks健康监控
  • 分布式缓存 Memory/Redis
  • Serilog记录日志
  • 全局异常处理
  • 基于JWT策略授权 实现通用权限管理功能:用户-角色-权限(菜单/按钮)
  • Quartz.net作业调度 支持发送邮件

实现功能

AdmBoots实现了实现通用权限管理,有了这些基础功能,只需要往里添加一些业务功能就可实现一个 后台管理系统。为简化CURD功能的开发,框架配备了代码是生成器。

  • 菜单管理
  • 角色管理
  • 用户管理
  • 任务调度

工程结构

采用DDD领域驱动设计,其中任务调度单独一层


image
.
├── AdmBoots.Api                # API接口层
|   ├── Authorization           # 策略授权认证相关
|   ├── Controllers             # 控制器,对外提供(Restful)接口
|   ├── Extensions              # ConfigureServices扩展
|   ├── Filters                 # 过滤器
├── AdmBoots.Application        # 应用层
|   ├── AutoMapProfile.cs       # AutoMapper 映射文件
|   ├── AppServiceBase.cs       # service基类,提供一些常用属性
|   ├── ITransientDependency.cs # 依赖注入继承接口,继承此接口可将Application层注入到容器
├── AdmBoots.Data               # 基础设施层-持久化层
|   ├── EntityFrameworkCore     # EF Core相关
│   │   ├── Repositories        # 自定义仓储写在这里  
│   │   │   ├── SqlExecuterRepository.cs# 通用sql执行器
│   │   ├── Seed                # 种子数据
│   │   └── Uow                 # 工作单元(事务处理)
│   │   └── AdmDbContext.cs     # 数据库上下文 
│   │   └── AdmRepositoryBase.cs# 仓储基类,在大多数的时候,这些方法已足够应付一般实体的需要      
├── AdmBoots.Domain             # 领域层
|   ├── IRepositories           # 仓储接口
|   ├── Models                  # 模型
├── AdmBoots.Infrastructure     # 基础设施层-通用技术支持
├── AdmBoots.Quartz             # 基于Quartz.NET的任务调度

项目初始化

环境要求

AdmBoots保证了最小系统环境要求,具备以下工具即可运行本系统

  • Visual Studio 2019 必须
  • MySQL-5.7 必须
  • Redis 非必须

运行系统

  1. 首先在GitHub上将代码Clone下来后,用VS2019打开,第一次打开项目工具会自动安装系统依赖的Nuget包,静静等待即可。如果Nuget包还原失败,可以在解决方案上右键【还原Nuget包】
  2. 打开API层的 <b>appsetting.json</b> 文件,设置系统启动的必要配置

a.数据库配置 -必须

//数据库配置
"Database": {
   "DbProviderName": "MySql", //只能写"Sqlite","SqlServer","MySql","Oracle"其中一个,并修改对应的连接字符串
   "ConnectionString": "Server=localhost; Port=3306;Stmt=; Database=admboot; Uid=root; Pwd=root;"
   //"SqlServerConnection": "Server=.;Database=WMBlogDB;User ID=sa;Password=123;",
   //"OracleConnection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;",
   //"SqliteConnection": "DataSource=C:\\WMBlog.db"
 }

b.缓存配置 -非必须,如需使用Redis,请配置Redis连接。默认MemoryCache

//Redis配置 Configuration=""时,系统使用MemoryCache
"Redis": {
   "Configuration": "", //127.0.0.1:6379
   "InstanceName": "AdmBoots"
 },

c.日志配置 -非必须,如果需要将日志输出到数据库,在Serilog节点需配置对应数据库连接。默认输出到文件

 //Serilog配置
 "Serilog":
   "WriteTo": [
     {
       "Name": "MySQL",
       "Args": {
         "connectionString": "Server=localhost; Port=3306;Stmt=; Database=admboot; Uid=root; Pwd=root;",
         "tableName": "Logs",
        "restrictedToMinimumLevel": "Warning"
       }
     }     
   ]
 }
  1. 初始化种子数据
    初始化种子数据分为两种方式

    a. sql脚本插入 <b>SQL</b> 文件夹,打开项目根目录下的,将里面的 AdmBoots_mysql.sql,quartz_mysql.sql 文件插入到数据库

    b. 使用Code First迁移命令,这里已为大家生成好迁移文件,打开程序包管理控制台,大家只需要做执行以下命令即可

    PM> update-database -Context AdmDbContext
    
  2. 验证
    启动项目,出现Swagger页面,项目初始化成功!

    Swagger页面上,如果Controller上有小锁的标志,表示我们需要先登录后才能进行测试验证。点击authorize按钮,输入admin,a123456登陆。

    image

最后

asp.net core的默认(csproj里面没有设置的情况下),是进程外启动,所以这里推荐使用项目启动方式,项目启动本质上就是执行了 dotnet run AdmBoots.Api.dll。不建议大家更改进程内启动(InProcess),因为InProcess方式在我们发布项目后,可能会出现一些路径上的问题(相对了托管服务器的路径)

image
<!--AdmBoots.Api.csproj 使用进程内启动(不建议)-->
<PropertyGroup>
     <TargetFramework>netcoreapp2.2</TargetFramework>
     <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>

当配置了OutOfProcess或者不配置的时候,无论使用iis启动还是dotnet run启动都是外进程,使用iis启动可以理解为iis作为了反向代理,用dotnet run启动可以视为自己作为内部服务器和反向代理结合使用

下一篇我们讲如何 使用该框架进行业务开发,以及权限配置使用,平时比较忙,更新可能不及时,有问题的小伙伴可以先入群

源码地址

后端:https://github.com/xuke353/AdmBoots

前端:https://github.com/xuke353/AdmBoots-Client

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342