随笔分类 - AspNetCore/MASA
后端开发框架
摘要:本节内容,部分为补充内容,部分涉及到9.3.10-9.3.12(P335-342)。主要NuGet包: RabbitMQ.Client 微服务间,跨进程的事件发布和订阅,需要借助第三方服务器作为事件总线,目前常用的有Redis、RabbitMQ、Kafka等,本章节介绍RabbitMQ。 一、基本过
阅读全文
摘要:本节内容,部分为补充内容,部分涉及到9.3.8-9.3.9(P327-334)。主要NuGet包: MediatR.Extensions.Microsoft.DependencyInjection 领域事件可以切断领域模型之间的强依赖关系,但如果使用传递的事件机制,要求将事件的处理者显式的注册到事件
阅读全文
摘要:本节内容,部分为补充内容,部分涉及到9.3(P321-326)。主要NuGet包:无 一、使用值对象的两种情形及其EFCore映射配置 1、没有标识符的从属实体类 如商店的地理位置,包含经度和纬度,可以定义一个包含Longitude(经度)和Latitude(纬度)两个属性的Geo类型。 如商品的质
阅读全文
摘要:本节内容,部分为补充内容,部分涉及到99.3(P311-320)。主要NuGet包:无 领域建模有两种方式,一是贫血模式,二是充血模型。EFCore对充血模型,已经有了非常好的支持,我们应该通过充血模型的方式来设计实体,将有关个体的业务逻辑封装在实体内。 一、贫血模型:又叫POCO类,类中只有属性或
阅读全文
摘要:本节内容,部分为补充内容,部分涉及到9.1-9.2(P299-311,326-327)。主要NuGet包:无 一、DDD领域驱动设计 1、DDD是一种设计思想,领域即业务,业务驱动设计,直接将业务映射到代码中。 2、DDD的设计始于领域的划分,一个项目可以划分为多个子域,并可以按功能划分为核心域、非
阅读全文
摘要:本节内容,为补充内容,部分类型涉及5.1和5.2,P129-P134。主要NuGet包: 一、实体更改跟踪 EFCore默认采用“快照更改跟踪”,会对“通过DbContext上下文查询出来的所有实体对象”进行跟踪,首次跟踪时,EFCore会为每个实体创建快照。通过对比当前值和快照值,就可以确定实体的
阅读全文
摘要:本节内容,部分为补充内容,部分涉及到5.2(P131-133)。主要NuGet包:如前章节所述 仓储模式,将数据访问层抽象出来,隐藏了底层对数据源的CRUD操作,这样在应用层或控制器中,我们直接访问仓储封装的方法即可,不需和数据源直接接触。泛型仓储以面向接口和泛型方式实现,一方面,可以非常方便的更换
阅读全文
摘要:本节内容,部分为补充内容。主要NuGet包: Microsoft.AspNetCore.SignalR.Client(BlazorWASM的SignalR客户端) Microsoft.AspNetCore.SignalR.StackExchangeRedis(使用Redis部署分布式SignalR)
阅读全文
摘要:本系列是杨中科2022年最新作品《ASP.NET Core技术内幕与项目实战》及B站配套视频(强插点赞)的精简集,是一个读书笔记。总结和提炼了主要知识点,遵守代码优先原则,以利于快速复习和查询。所以,建议和我一样,先阅读书籍或看B站视频,然后再通过本系列快速的复习知识点。 本系列覆盖了书本中的大多数
阅读全文
摘要:本节内容,部分为补充内容。主要NuGet包: Dapper(Dapper操作数据库) System.Data.SqlClient(连接数据库) Microsoft.EntityFrameworkCore.SqlServer(ORM的SqlServer数据库提供者) Microsoft.EntityF
阅读全文
摘要:本节内容,涉及到8.3(P269-P272),以WebApi说明为主。主要NuGet包: 内置命名空间:System.ComponentModel.DataAnnotations FluentValidation.AspNetCore(数据检验框架) 一、请求数据检验的作用 1、客户端和服务端进行数
阅读全文
摘要:本节内容,涉及到8.2(P265-P269),以WebApi说明为主。主要NuGet包: 一、一个简单的托管服务 //创建托管服务类 //TestBgService public class TestBgService : BackgroundService { private readonly I
阅读全文
摘要:本节内容,涉及到7.4(P198-P221),以WebApi说明为主。主要NuGet包: Microsoft.Extensions.Caching.StackExchangeRedis(Redis缓存) 一、图解缓存机制 1、如图所示,首次请求数据时,先从缓存中获取,如果没有,则继续向数据库中获取。
阅读全文
摘要:本节内容,涉及到7.6(P229-P242),以WebApi说明为主。主要NuGet包:无 一、图解筛选器及其与中间件的关系 1、上图涵盖了中间件和筛选器,中间件是AspNetCore层面的构件,更加底层;而筛选器是属于MVC/WebApi中间件的构建。两者的执行逻辑有相似之处,但它们作用在不同层面
阅读全文
摘要:本节内容,涉及到7.6(P229-P242),以WebApi说明为主。主要NuGet包:无 一、图解中间件 1、服务器收到HTTP请求后,需要对请求进行一系列处理;当控制器中的操作方法完成后,也会对响应进行一系列处理。这一系列操作,如果全部硬编码到AspNetCore框架中,代码耦合度会很高。所以框
阅读全文
摘要:本节内容,涉及到6.1-6.6(P155-182),以WebApi说明为主。主要NuGet包:无 一、创建WebApi的最佳实践,综合了RPC和Restful两种风格的特点 1 //定义Person类和ErrorInfo类 2 public record Person(int Id, string
阅读全文
摘要:本节内容,涉及4.5(P96-P97)、5.2(P131-P141)。主要NuGet包:如前章节所述 一、查看SQL语句,调试LINQ语句 //在DbContext类的OnConfiguring方式中,增加显示SQL的配置。即可在控制台中查询生成的SQL public class MyDbConte
阅读全文
摘要:本节内容,涉及5.3(P142-P153)。主要NuGet包: ExpressionTreeToString(用于以string格式,输出表达式树) System.Linq.Dynamic.Core(通过字符串形式,非常简单的构建表达式树,可以不用自己构建表达式树) 一、Expression(表达式
阅读全文
摘要:本节内容,涉及4.6(P116-P130)。主要NuGet包:如前述章节 一、LINQ和EFCore的集合查询扩展方法的区别 1、LINQ和EFCore中的集合查询扩展方法,虽然命名和使用完全一样,都两者定义在不同的命名空间下,是不同的方法。PS:LINQ定义在System.Linq中,EFCore
阅读全文
摘要:本节内容,涉及4.6(P84-P92)。主要NuGet包:如前述章节 一、配置映射关系,有两种方案,一是Data Annotation、二是如2.3节使用的Fluent Api,推荐使用Fluent Api。 二、Fluent Api的基本配置 //以下案例都在DbContext的OnModelCr
阅读全文