
.NET 8 实战--孢子记账--从单体到微服务--单体开发
文章平均质量分 84
专栏通过一步一步的开发并完善一个记账软件项目,来引导大家学习相关的知识
喵叔哟
Dedicated to promoting and advancing .NET in China for a lifetime.
展开
-
1. 【.NET 8 实战--孢子记账--从单体到微服务】--特别说明
业务逻辑的问题,是我故意留下的业务Bug,这时因为我们的专栏目的不仅仅是教会同学们如果把一个单体应用转化为微服务应用,还要教会同学如何应对项目开发中需求的变更、需求中的bug、bug管理以及项目管理等。这篇文章是针对《孢子记账》实战专栏的说明文章,用以解答同学们的疑惑,后续针对专栏的疑惑我都会写在这里,各位铜同学有什么问题也可以在这篇文章下面留言。关于配套视频这个问题,就像我在第一个问题中所说的那样,最近半年多一直很忙,因此出配套视频的计划目前需要暂缓,但是目前已经在准备中。做过介绍了,不了解的请移步。原创 2024-09-22 17:31:22 · 437 阅读 · 0 评论 -
2. 【.NET 8 实战--孢子记账--从单体到微服务】--开篇
如果你没有任何 C# 编码经验,请查先查看我写的关于C#相关的专栏,当然你也可以查看微软官方文档。如果你没有任何 vue 编码经验,请先查看vue官网的教程,或者静待我后续vue相关的专栏。原创 2024-02-14 21:38:55 · 959 阅读 · 0 评论 -
3. 【.NET 8 实战--孢子记账--从单体到微服务】--确定大需求
本节课我们对即将开发的应用孢子记账进行详细的需求分析。需求分析是软件开发中至关重要的一步,旨在明确并记录用户及系统的需求,从而将用户的期望转化为具体的、可实现的软件需求,以确保最终产品能满足用户的需求和期望。需求分析过程包括多个步骤:识别利益相关者、收集需求、分类需求、详细分析需求、编写需求文档、验证需求、管理需求变更、制定需求基线和需求追踪。这些步骤不仅确保需求的明确性和可行性,还为项目的设计、开发、测试和维护提供了坚实的基础。原创 2024-07-25 21:57:07 · 1173 阅读 · 0 评论 -
4. 【.NET 8 实战--孢子记账--从单体到微服务】--需求拆分与规划
在上一篇文章中我们收集了需求,并对需求进行了简单的分析和规划,但是对于开发人员来说,上一篇文章的需求还不够详细,并且没有形成计划。因此本篇文章将带领大家来拆分需求并规划开发里程碑。原创 2024-11-01 14:14:49 · 648 阅读 · 0 评论 -
5. 【.NET 8 实战--孢子记账--从单体到微服务】--开发环境设置
在这一小节中,我们介绍了开发环境的设置。首先,安装.NET6 SDK用于开发和测试,并强调选择SDK而非Runtime。接着,推荐使用VS2022进行服务端开发,并确保选择ASP.NET和Web开发选项。对于前端开发,使用VS Code,并将在后续章节中详细介绍配置方法。此外,项目使用MySQL 8.0作为数据库,并推荐使用DataGrip进行数据库管理。安装这些工具都较为简单,按照提示操作即可。原创 2024-07-27 16:47:05 · 918 阅读 · 0 评论 -
6. 【.NET 8 实战--孢子记账--从单体到微服务】--编写服务端框架
本文详细讲解了如何配置 ASP.NET Core 应用中的几个关键组件。首先,介绍了安装和配置 NuGet 包,包括数据库操作、对象映射、JWT 身份验证。接着,展示了如何在 appsettings.json 中配置 JWT 验证,并在 Program.cs 中设置相关服务。随后,讲解了如何配置 AutoMapper、数据库上下文、以及数据库连接。最后,介绍了如何配置 Swagger 生成 API 文档,并封装视图模型验证信息的返回值。通过这些配置,能帮助开发者快速构建和维护高效的应用程序。原创 2024-07-31 23:54:23 · 1158 阅读 · 0 评论 -
7. 【.NET 8 实战--孢子记账--从单体到微服务】--用户(登录/注册/Token)
该文章介绍了一个面向用户的项目开发,首先梳理了服务端的需求,如登录、注册、找回密码、用户查询和管理等功能。接着,创建了用户类SysUser并通过 EF Core 映射到数据库,完成数据迁移。然后详细讲解了如何创建用户服务和 Web API 接口,处理注册、登录和找回密码等操作,包括密码的加盐哈希处理和生成 JWT Token。最终,通过依赖注入,将这些服务集成到项目中,确保了用户数据的安全性和系统的扩展性。原创 2024-09-09 14:10:24 · 950 阅读 · 0 评论 -
8. 【.NET 8 实战--孢子记账--从单体到微服务】--用户(删除/修改/查询)
本文介绍了与用户相关的接口开发,包括删除、修改和查询操作。首先,删除用户功能通过逻辑删除标记用户,而不删除关联数据,以便后续查询。其次,修改用户信息时,需确认用户存在,更新用户名、邮箱和手机号。查询用户功能支持分页和模糊查询,根据用户名筛选结果。每个功能的实现均涉及接口、服务层和控制器的开发,确保系统能够通过 RESTful API 进行用户管理。此外,使用 AutoMapper 简化对象转换,使数据库实体和视图模型的映射更加便捷。原创 2024-09-22 18:48:26 · 1065 阅读 · 0 评论 -
9. 【.NET 8 实战--孢子记账--从单体到微服务】--角色(增加/删除/修改/查询)
第一步,我们来创建视图模型/// 角色视图模型/// 角色名称set;类比较简单,因此我们不再讲解。这篇文章我们一起实现了角色的增删改查功能,并对主要代码进行了讲解。原创 2024-10-11 00:46:17 · 1187 阅读 · 0 评论 -
10. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理
这篇文章主要讲解了接口路径管理的开发,功能比较简单。从这篇文章开始,我们将引导大家自主编写代码,我只提供其中一个需求的代码,但是对于逻辑复杂的代码,我会带领大家一步一步的来实现。原创 2024-11-03 14:55:16 · 1257 阅读 · 0 评论 -
11. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--角色可访问接口管理
这篇文章主要讲解了角色可访问接口管理的编写,代码和逻辑也很简单,因此没有详细讲解。角色可访问接口管理的剩余需求我希望大家一起来编写出来。原创 2024-11-09 23:50:36 · 1688 阅读 · 0 评论 -
12. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件
这篇文章我们大家一起编写了孢子记账的第一个中间件,后续我们还有更多的中间件编写。原创 2024-11-10 19:59:32 · 644 阅读 · 0 评论 -
13. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码
这篇文章很短吧,希望大家能动手把其他的TODO都来完成。原创 2024-11-17 23:27:41 · 547 阅读 · 0 评论 -
14. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--章节总结
通过这三个章节,读者能够从用户管理的基础功能(登录、注册)到进阶操作(修改、删除、查询),再到权限与接口的精细化绑定,系统化地掌握用户与权限管理的完整实现路径。结合 .NET 8 的新特性,这些设计为构建安全的系统提供了实践指导,也为后续扩展更多复杂功能奠定了基础。原创 2024-11-17 23:38:37 · 680 阅读 · 0 评论 -
15. 【.NET 8 实战--孢子记账--从单体到微服务】--收支分类
这篇文章以新增收支分类功能为例,带领大家完成了第一个业务功能。需求比较简单,就是一些基本的CURD,但是大家要细心的查看需求,防止遗漏掉一些功能点。原创 2024-11-21 00:43:54 · 1019 阅读 · 0 评论 -
16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器
我们一起编写了获取每日汇率的定时器,掌握了 Quartz.NET 的使用,我们的项目也距离完成越来越近了。原创 2024-11-22 01:36:01 · 1617 阅读 · 0 评论 -
17. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--主币种设置
这篇文章我们实现了在注册时设置主币种的功能。我们之所以使用消息队列实现是因为注册功能和设置主币种属于两个业务,因此我们需要将它们分离出来,同时即使设置主币种操作失败了也不影响注册功能。这里只列出了核心的类和方法,其他的方法以及和Config相关的操作请大家自己动手来实现一下,完成后和我的代码对比一下看看有什么不同。原创 2024-11-23 23:37:36 · 1414 阅读 · 0 评论 -
18. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--账本
这篇文章带领大家一起实现了账本的删除功能,代码比较简单,只要充分了解需求后就能编写出来。账本剩余的功能代码,大家自己动手实现。原创 2024-11-25 17:10:31 · 2780 阅读 · 1 评论 -
19. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--收支记录
这篇文章我们一起实现了收支记录中的新增记录功能,这功能比前面咱们实现的功能稍显复杂,需要获取主币种、获取主币种与用户选择的币种之间的汇率,最后根据汇率换算成主币种。下一篇文章我们将结合主币种设置以及收支记录实现切换主币种后重新计算以前记录的转换后的金额。原创 2024-12-14 16:45:28 · 1231 阅读 · 0 评论 -
20. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--补充--自动添加接口地址
在开发过程中,针对每次新增接口需要手动添加到接口表的问题,设计并实现了一个自动化解决方案:利用反射动态生成 API 路径并自动存储到数据库中。具体实现通过新增一个名为AddPath的静态类完成。此类通过反射扫描当前程序集的控制器及其操作方法(Action),提取路由信息,动态生成完整的 API 路径,并检查路径是否已存在于数据库中。如果不存在,则将路径及相关元数据保存到数据库中,从而实现接口的自动注册。实现过程中,AddPath类的核心逻辑包括反射获取控制器及其Route特性,替换路由模板中的占位符(如和。原创 2024-12-29 22:24:35 · 904 阅读 · 0 评论 -
21. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--补充--自动添加角色可访问接口
本文通过类实现了动态分配角色与接口路径的功能。代码利用反射获取控制器及其方法,解析Authorize和Route特性,提取路径和角色信息,生成映射关系并存储到数据库中。此方法减少了手动配置的繁琐,提高了权限管理的自动化和灵活性,为系统提供了高效的权限初始化方案。原创 2024-12-30 23:43:44 · 746 阅读 · 1 评论 -
22. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--切换主币种
通过主币种切换的业务场景,探讨了如何在用户更改主币种配置后重新计算历史收支记录的转换金额。这一功能的实现基于两个核心需求:统一币种便于统计数据,以及方便用户按照本地币种查看收支信息。实现过程中,首先修改主币种配置,当用户设置新的主币种后,系统通过消息队列发送变更通知。相关处理逻辑通过订阅该通知,触发重新计算金额的操作。具体流程包括:查询当前用户的所有收支记录,获取新的主币种和原币种之间的汇率,并根据汇率计算每条记录的转换金额,最后更新数据库中的记录。原创 2025-01-01 00:22:35 · 875 阅读 · 0 评论 -
23. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算
这篇文章我们一起编写的预算服务的新增功能,剩余的功能大家自己动手实现,然后下载我的代码来对比一下哪里不一样。下一篇文章,我们将结合预算和记账功能来完成一个稍微复杂的业务:预算的回退和扣除。原创 2025-01-04 22:00:30 · 1054 阅读 · 0 评论 -
24. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算扣除、退回、补充
文章介绍了预算管理中复杂功能的实现,包括预算扣除、退回和补充。预算回退涉及三种情况:修改后的支出金额小于修改前的金额、删除支出记录、记录类型从支出改为收入;预算补充包括记录类型从收入改为支出以及修改后的支出金额大于修改前的金额。文章详细描述了如何在新增、删除和修改收支记录时,使用 EF Core 事务机制确保操作的原子性和数据一致性。具体实现方法包括调整预算金额、根据收支记录类型动态更新预算、处理异常并回滚事务,以保证数据库的完整性和正确性。文章通过实际代码示例清晰地阐述了这些操作的细节。原创 2025-01-14 01:01:27 · 1088 阅读 · 0 评论 -
25. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算金额的币种转换
这篇文章的代码与第22篇文章中的代码基本相同,主要目的是在主币种切换时,支持预算金额的重新计算。首先介绍了中的Update方法如何在用户配置更新时,通过RabbitMQ发布消息,触发预算金额的重新计算。然后,文章讲解了在中新增的代码,如何通过方法订阅该消息并处理主币种变化后的预算更新。处理逻辑包括获取用户的所有预算、查询新旧币种及其汇率、将预算金额从旧币种转换为新币种,并最终更新预算数据。原创 2025-01-17 00:46:07 · 780 阅读 · 0 评论 -
26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置
这篇文章模拟了项目需求新增的情况,展示了如何根据新需求增加功能接口。项目经理提出的新增功能包括重置密码、安全设置、修改用户名和注销账户,要求各功能独立实现。文章详细列出了每个功能的需求说明,并以注销账户为例进行了代码示例。通过添加LogoutUser方法,处理用户注销请求,验证用户是否可删除,并根据情况返回相应的状态和消息。整个过程展示了如何应对需求变更,确保功能扩展的可行性和独立性。原创 2025-01-19 11:16:21 · 610 阅读 · 0 评论 -
27. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表服务
本文介绍了记账应用中的报表功能实现,作为单体应用开发的最后环节,其核心是提供一个接口供客户端查询报表数据。本功能实现以清晰的需求分析为起点,逐步完成了模型设计、服务接口定义、接口实现以及控制器编写。需求方面,报表查询需支持按报表类型(包括月报、季报、年报)和时间维度(年份、月份)进行查询,其中月份参数为可选。功能设计中,视图模型定义了报表类型、年份和月份的基本字段,并通过校验属性确保必填字段的正确性。原创 2025-01-25 01:52:47 · 1521 阅读 · 0 评论 -
28. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表定时器与报表数据修正
在这篇文章中,我们介绍了如何在.NET 8环境下实现定时生成财务报表的功能。首先,分析了需求,确定了报表数据统计的时间和更新策略。然后,通过使用Quartz库创建了定时器类,该类实现了IJob接口,并在其Execute方法中实现了报表数据的生成和更新逻辑。在实现过程中,通过依赖注入获取必要的服务实例,查询用户的收入和支出记录,生成季度、年度和月度报表,并将这些报表和日志条目保存到数据库中,实现了报表数据的定期更新和持久化存储。此外,还展示了如何在新增支出记录时更新报表数据,确保报表数据的实时性和准确性。原创 2025-01-27 20:55:49 · 1947 阅读 · 0 评论 -
29. 【.NET 8 实战--孢子记账--从单体到微服务】--项目发布
本文是本专栏的最后一篇文章,聚焦于服务发布的关键步骤,而非详细的服务器配置。本篇内容从服务器配置到项目发布,再到服务自启动配置,帮助大家完整掌握发布流程。在服务器配置方面,推荐选择4U8G配置或本地虚拟机,运行环境则需要安装、MySQL 8 和 RabbitMQ。在项目发布部分,我们通过解决方案管理器设置发布参数(如部署模式和目标运行时),并重点分析了框架依赖与独立部署两种模式的区别及适用场景。原创 2025-01-27 17:05:53 · 1368 阅读 · 0 评论