从壹开始前后端开发【.Net6+Vue3】
项目名称:KeepGoing(继续前进)
1.1介绍
工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长
将以Girvs框架为基础,从壹开始二次开发一个前后端管理框架
在这过程中一步步去学习使用到的技术点,也同时会将在此过程中遇到的问题进行分享
1.2软件采用技术架构
后端开发语言:C#
后端开发平台:.Net6
前端开发框架:Vue3
1.3后端框架搭建
方案整体结构如下

KeepGoing.WebApi Api接口层
KeepGoing.Application 应用层
KeepGoing.Domain 领域层
KeepGoing.Infrastructure 基础数据层
1.4引用Girvs包到对应的项目
KeepGoing.WebApi
- Girvs.Swagger 主要引用Swagger包,以及Girvs主框架包
- Microsoft.EntityFrameworkCore.Tools包 数据库迁移文件命令
KeepGoing.Application
- Girvs.DynamicWebApi 生成动态API
- Girvs.AuthorizePermission 用户用户授权
KeepGoing.Domain
- Girvs.AuthorizePermission 用户用户授权
KeepGoing.Infrastructure
- Girvs.EntityFrameworkCore 数据库持久化
1.5在启动程序中进行注入

ConfigureApplicationServices代码如下

个人对其中一些代码的理解
services.AddBindAppModelConfiguation(configuration, appSettings);
初始化appsettings.json配置文件,并绑定到Configuration
services.AddBindSerilogConfiguation(configuration);
初始化Serilog.json配置文件
IEngine engine = EngineContext.Create();
engine.ConfigureServices(services, configuration);
创建引擎,配置服务
1.6实现用户登录
1.6.1 创建用户实体
在KeepGoing.Domain添加Models文件夹,文件夹下添加User.cs 类文件
public class User : AggregateRoot<Guid>, IIncludeInitField, IIncludeMultiTenant<Guid>, IIncludeCreateTime, IIncludeCreatorId<Guid>
{
/// <summary>
/// 登陆名称
/// </summary>
public string UserAccount { get; set; }
/// <summary>
/// 用户密码
/// </summary>
public string UserPassword { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户联系方式
/// </summary>
public string? ContactNumber { get; set; }
/// <summary>
/// 用户类型
/// </summary>
public UserType UserType { get; set; }
/// <summary>
/// 是否初始化数据
/// </summary>
public bool IsInitData { get; set; }
/// <summary>
/// 租户ID
/// </summary>
public Guid TenantId { get; set; }
public DateTime CreateTime { get; set; }
public Guid CreatorId { get; set; }
}
主要包含用户基础信息
1.6.2 添加 EntityTypeConfiguration
在KeepGoing.Infrastructure下创建EntityConfigurations文件夹,在文件夹下面建立UserEntityTypeConfiguration
主要作用是进行数据库映射,并添加种子数据,以及建议一些索引

1.6.3 添加DbContext
在KeepGoing.Infrastructure创建KeepGoingDbContext.cs类文件

[Girvs.EntityFrameworkCore.DbContextExtensions.GirvsDbConfig("KeepGoing")]
主要用户绑定到指定的数据库配置文件,如果有多个数据库,可以创建多个DbContext类文件,并添加以上特性
启动程序是会在appsettings.json中生成对应的配置节点
启动后的appsettings.json文件大致如下

可以在这里进行数据库配置,下面简单介绍一些参数
UseDataType 连接数据库类型 0 sqlServer 1 mysql
VersionNumber 数据库版本
SQLCommandTimeout 默认执行超时时间
MasterDataConnectionString 主数据库连接字符串
1.6.4添加IUserRepository
在KeepGoing.Domain下创建IRepositories文件夹,文件夹下创建IUserRepository.cs文件
定义一个获取用户接口

1.6.5添加UserRepository
在KeepGoing.Infrastructure下创建Repositories文件夹,文件夹下创建UserRepository.cs文件
实现获取用户接口

1.6.6添加IUserService、UserService
在KeepGoing.Application项目下创建AppService\User文件夹,文件夹下创建IUserService.cs、UserService.cs类文件
定义用户登录获取token接口并进行实现,这里已经封装了Jwt生成Token方法,直接调用


此时,获取用户接口全流程全部完成了
1.6.7 生成迁移文件,并生成数据库
打开程序包管理控制台,设置默认项目为:KeepGoing.WebApi
运行
add-migration init
update-database
这时将会生成对应的数据库
1.6.8 运行项目
这里看到,默认启用了swagger,并增加了Authorize授权,以及获取token接口

闲谈下对DDD的理解
DDD介绍(来源GPT)
DDD(Domain-Driven Design,领域驱动设计)是一种软件开发方法论,主要关注解决复杂业务领域的问题。DDD的核心思想是将软件系统按照真实世界的业务领域模型进行划分和设计,让领域专家和开发团队共同参与设计过程,以实现高内聚、低耦合的架构。
DDD强调将领域模型和业务逻辑置于核心位置,通过分层和模块化的方式构建可复用和可维护的软件系统。它提倡使用统一的语言和概念来描述领域模型,以便于沟通和理解。另外,DDD还推崇使用领域事件、聚合根、实体、值对象等概念来描述和组织领域模型的结构。
除了领域模型的设计,DDD还关注业务模型的边界划分和限界上下文的定义。限界上下文是指业务领域中的一个隔离环境,将特定的业务概念和规则进行封装。这有助于避免不同领域之间的混淆和冲突,同时在大型项目中也可以实现团队的自治和解耦。
DDD还提供了一系列的设计模式和战术技巧,例如聚合根、领域服务、领域事件等,以帮助开发人员更好地实现领域模型和业务逻辑。最终,DDD的目标是提供一种更加灵活、可扩展和可维护的软件设计方法,以适应复杂业务领域的需求。
个人对DDD的理解:
DDD不同于传统三层架构的地方在于它更关注业务,将重点从数据库设计倾向于业务设计,其中的领域事件、聚合根、实体、值对象都是服务于业务。也就是这样它能够应对更为复杂、变化更频繁的业务场景。业务独立且不受干扰,方便扩展以及拆分成各个子系统。
结合自己以及身边的同事,对于DDD、传统框架开发中感受到的不同点进行一个汇总:
1.DDD开发对比传统框架变得更'麻烦',如果能够理解其中各个层级意义,个人觉得是变得更简单
- 传统架构写增删改查,定义Api接口->业务逻辑处理(BLL)->调用数据访问层(DAL)
- DDD中写增删改查,查询用到Query查询处理(读请求),增删改用到Command(命令),其中查询输入输出模型又会用到AutoMap转换成领域中使用到的对象
2.DDD层级对比传统框架层级更多,但代码架构更清晰一些
3.DDD整体系统各部分松耦合,可扩展性好
4.CQ两端架构分离、相互不受束缚,各自独立设计、扩展
5.DDD 系统复杂层度更高,一般小型快速开发项目采用传统三层开发效率会高很多
todo...
这上面只是个人的一些理解,如果其中有些错误的地方,还希望大家帮忙指出
从壹开始前后端开发【.Net6+Vue3】的更多相关文章
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
缘起 哈喽大家好,兜兜转转终于来到了Vue实战环节,前边的 6 篇关于Vue基础文章我刚刚简单看了看,感觉写的还是不行呀,不是很系统,所以大家可能看上去比较累,还是得抽时间去润润色,修改修改语句和样式 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
更新 1.在使用的时候,特别是更新数据的时候,如果不知道哪里有问题,可以查看数据库 和 实体类 的字段,是否大小写一致,比如 name 和 Name 2.在使用Sqlsugar 的 CodeFirst ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1
代码已上传Github+Gitee,文末有地址 书说上文<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之十 || AOP面向切面编程浅 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探
更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字
缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十六 ║Vue基础:ES6初体验 & 模块化编程
缘起 昨天说到了<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║ Vue前篇:JS对象&字面量&this>,通过总体来看,好像大家对这一块不是很 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch
回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
前言 哈喽大家周五好,马上又是一个周末了,下周就是中秋了,下下周就是国庆啦,这里先祝福大家一个比一个假日嗨皮啦~~转眼我们的专题已经写了第 23 篇了,好几次都坚持不下去想要中断,不过每当看到群里的交 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
随机推荐
- ChatGPT4通道开放接入基于OPEN AI 平台你的任何APP 可一键接入AI 智能
你一定很好奇什么是 OPEN AI快速开发平台 顾名思义,开放的OPEN AI平台. 基于这个平台你的上层应用,如何 APP,小程序,H5,WEB, 公众号,任何一切终端都可以轻松接入,AI智能应用. ...
- WPF入门教程系列二十四——DataGrid使用示例(2)
WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...
- Python数据类型 - 元祖
介绍 元祖和列表都是有序数列,列表是用 [ ],元祖使用() 元祖不同的地方在于创建后不能修改 注意:当元祖中只有一个元素的时候,要加上逗号(一个括号会被当成运算符使用) 比如: (123, ) ...
- Ubuntu22.04 安装单机版kubernetes
前言 上期讲到要实现.net 6框架下的EF Core操作数据库基本增删改查,没有及时兑现.没有兑现的原因就是因为安装kubernetes.安装kubernetes的过程是灾难性的,也是十分顺利的.灾 ...
- 文心一言 VS 讯飞星火 VS chatgpt (27)-- 算法导论5.1 2题
二.请描述 RANDOM(a,b)过程的一种实现,它只调用 RANDOM(0,1).作为a和b的函数,你的过程的期望运行时间是多少? 文心一言: 假设我们有一个伪随机数生成器,可以生成在[0,1)范围 ...
- celery笔记一之celery介绍、启动和运行结果跟踪
本文首发于公众号:Hunter后端 原文链接:celery笔记一之celery介绍.启动和运行结果跟踪 本篇笔记内容如下: celery 介绍 celery 准备 celery 启动和异步任务的运行 ...
- 2023年最新sentinel-dashbord部署安装(保姆级别)
目录 Sentinel-dashboard安装下载 前景提要 一. 构建环境 二.下载安装与配置 1.进入百度搜索:Sentinel 或访问地址:面向云原生微服务的高可用流控防护组件 2.进入git主 ...
- Access+Trunk 配置
实验拓扑 实验需求 按图示给各 PC 配置 IP 地址 在SW1和SW2上创建聚合组 PC1 与 PC3 属于 VLAN 10 : PC2 与 PC4 属于 VLAN 20 利用 Access 与 T ...
- ReactNative原理与核心知识点
React Native特点 跨平台 使用js写出页面组件代码被React框架统一转成Virtual DOM树,Virtual DOM树是UI结构的一层抽象,可以被转换成任何支持端的UI视图. Rea ...
- Shodan使用指南
Shodan是用于搜索连接到互联网的设备的工具.与搜索引擎可以帮助你找到网站不同,Shodan可以帮助你找到有关台式机,服务器,IoT设备等的信息.此信息包括元数据,例如在每个设备上运行的软件. Sh ...