从壹开始前后端开发【.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 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
随机推荐
- 2022-12-08:给定n棵树,和两个长度为n的数组a和b i号棵树的初始重量为a[i],i号树每天的增长重量为b[i] 你每天最多能砍1棵树,这天收益 = 砍的树初始重量 + 砍的树增长到这天的总
2022-12-08:给定n棵树,和两个长度为n的数组a和b i号棵树的初始重量为a[i],i号树每天的增长重量为b[i] 你每天最多能砍1棵树,这天收益 = 砍的树初始重量 + 砍的树增长到这天的总 ...
- 2022-04-28:有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,
2022-04-28:有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始, ...
- Java程序设计复习提纲(上:入门语法)
目录 上: 基本语法与编译运行 数据类型和关键字 常用语法 数组与字符串 异常处理 中: 面向对象和类 下: 图形界面 基本语法与编译运行 java没有指针没有全局变量 Java源代码文件的后缀名是& ...
- APP中RN页面渲染流程-ReactNative源码分析
在APP启动后,RN框架开始启动.等RN框架启动后,就开始进行RN页面渲染了. RN页面原生侧页面渲染的主要逻辑实现是在RCTUIManager和RCTShadowView完成的. 通过看UIMana ...
- java(方法定义、调用、重载)
1.方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:就是一个方法只完成一个功能, ...
- .Net Core后端架构实战【3-介入IOC控制反转】
摘要:基于.NET Core 7.0WebApi后端架构实战[2-介入IOC控制反转] 2023/04/09, ASP.NET Core 7.0, VS2022 引言 Inversion of Co ...
- 如何卸载 python setup.py install 安装的包?
当我们半自动安装某些 python 包时,总是存在很多依赖关系的问题,而这些问题还是很难避免的,所以,当我们安装一个不确定的包的时候,最好提前收集一些相关资料,或者请教他人,同时最好把安装过程都记录下 ...
- Linux下程序时间消耗监控与统计
良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产 ...
- DIY制作隔离信号注入变压器
最近在学习模电知识,接触到了测量运放环路增益,需要使用合适的注入变压器,查找资料发现商用信号注入变压器价格昂贵,不适合个人学习使用.看到LOTO使用普通音频变压器做测试,也跟技术群友做了交流,尝试使用 ...
- 05-面试必会-SpringBoot&SpringCloud
01- 讲一讲 SpringBoot 自动装配的原理 1.在 SpringBoot 项目的启动引导类上都有一个注解@SpringBootApplication 这个注解是一个复合注解, 其中有三个注解 ...