从壹开始前后端开发【.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-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000
2022-12-19:大的国家.如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000 ...
- 2022-08-17:以下go语言代码输出什么?A:运行时 panic;B:32;C:编译错误;D:0。 package main func main() { var x *struct {
2022-08-17:以下go语言代码输出什么?A:运行时 panic:B:32:C:编译错误:D:0. package main func main() { var x *struct { s [] ...
- 2021-02-14:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2,开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)。如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到 N-1 位置;如果机器人来到中间位置,那么下一步可以往左走或者往右走;规定机器人必须走 K 步,最终能来到P位置(P也是1~N中的一个)的方法有多少种?
2021-02-14:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2,开始时机器人在其中的M位置上(M 一定是 1~N 中的一个).如果机器人来到1位置,那么下一步只能往右来到2位置:如 ...
- weekday
# 模块中的方法weekday()# 可用于检索星期几,结果返回0 - 6# 之间的整数,用来代表"星期一"到"星期日".# self.wt_w = self. ...
- Jan 2023-Prioritizing Samples in Reinforcement Learning with Reducible Loss
1 Introduction 本文建议根据样本的可学习性进行抽样,而不是从经验回放中随机抽样.如果有可能减少代理对该样本的损失,则认为该样本是可学习的.我们将可以减少样本损失的数量称为其可减少损失(R ...
- AcWing 243. 一个简单的整数问题2-(区间修改,区间查询)
给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l+1],-,A[r]都加上 d. Q l r,表示询问数列中第 l∼r个数的和. ...
- 2013年蓝桥杯C/C++大学A组省赛真题(振兴中华)
题目描述: 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示: 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时,先站在左上角的写着&quo ...
- SpringMVC 解决中文乱码问题以及前后端Json格式数据交互的测试
1.今日遇到的报错: 跳转网页出现404原因: 1.检查project structure里面的webapp路径是否正确: 2.检查project structure里的artifaccts里的WEB ...
- WPF之浅谈数据模板(DataTemplate)
数据模板有什么用 简而言之,数据模板能让你更方便.更灵活的显示你的各类数据.只有你想不到,没有它做不到的(感觉有点夸张,实践之后,你就觉得一点不夸张 ). 直接对比下效果: 无数据模板 应用了数据模板 ...
- 【HarmonyOS】HarmonyOS应用APP与HAP包签名信息查看方法
HarmonyOS可以通过DevEco Studio 构建对应的APP包或者是HAP包,对于签名我们有两种方式: DevEco Studio提供了根据开发者信息生成自动调试签名的能力方便各位开发者进 ...