#.NET Platform
#.NET Platform 话题下的全部内容。
共 583 项内容
构建可靠的事务性发件箱模式
事务性发件箱模式确保将事件保存在数据存储中,然后再最终推送到消息代理。 如果业务对象和相应的事件保存在同一数据库事务中,则保证不会丢失任何数据。 所有内容都将被提交,或在出错时所有内容回滚。 为了最终发布事件,其他服务或工作进程会在发件箱表中查询未处理项,发布这些事件,并将其标记为已处理。 此模式可确保创建或修改业务对象后不会丢失事件。
自动迁移和数据库初始化
EF Core中数据库迁移与初始化的核心概念与实用技巧。内容包括生成与应用迁移脚本、EnsureCreatedAsync与MigrateAsync的使用及冲突解决、通过内部服务实现优雅的自动迁移、EF Core 9.0推荐的异步种子数据初始化方法,以及利用IHostedService或BackgroundService实现耗时操作的异步数据库初始化。通过本课程,开发者将掌握高效管理数据库生命周期的最佳实践,提升项目开发效率与质量。
重构代码并抽取基础构建库
本次重构优化了事件总线架构,提升了系统的扩展性和灵活性。新增支持包和多个项目,增强了事件处理能力。通过实现基于 Dapr 和 RabbitMQ 的事件总线,改进了消息传递效率。加入了分布式锁功能,确保并发场景下的数据一致性。
在 Aspire 中集成 PostgreSQL 数据库
在 Host 项目中添加 PostgreSQL 数据库,在最终的应用中引用 PostgreSQL 数据库,添加 PostgreSQL pgAdmin 资源,添加 PostgreSQL pgWeb 资源。
关于 Aspire 应用宿主的编排
配置显式资源启动,等待资源启动和完成,自定义容器的启动参数,配置容器资源生存期,配置外部参数,外部连接字符串,终结点引用,在 Redis 上启用图形管理扩展,注册生命周期钩子,网络模型和多副本启动。
引入 CPM 中心包管理
管理单个项目的依赖项很容易,随着多项目解决方案在规模和复杂性上逐渐增加,管理其依赖项可能会变得困难,在管理许多不同项目的常见依赖项的情况下,可以利用中央包管理 CPM 功能从单个位置轻松完成所有包版本的管理。
使用 TimeProvider 类注入时间
在零度框架中使用 TimeProvider 类型,System.TimeProvider 是一种时间抽象,它以 DateTimeOffset 类型的形式提供时间点。 通过使用 TimeProvider,可确保代码可测试且可预测。 TimeProvider 已在 .NET 8 中引入。
重构单元测试和集成测试
重构单元测试,使用 DistributedApplicationFactory 重构分布式测试通用主机,针对不通过测试的代码进行重构,关于内存数据库的共享模式。
零度框架升级到 Aspire 9.0 版本
将零度框架升级到 Aspire 9.0 版本,包括升级 Visual Studio 开发工具和非 Visual Studio 开发环境的步骤。文章涵盖了安装 .NET Core SDK 9.0、升级 Aspire 工作负载、修改项目文件以支持新版本,以及使用工具简化升级过程。此外,还介绍了服务发现支持 https+http 的新写法。
数据库对象命名约定
不同数据库对象的命名约定不同,EF Core 为了适配不同数据库,提供了一些命名约定的配置选项,可使用 Humanizr 库将字符串转换为不同的命名风格,社区对单数和复数表名的争论一直存在,没有统一的标准,但零度推荐使用单数形式,使用自动化命名约定器,规范化迁移历史表。
使用改进后的资源浏览器
在最新版的 Visual Studio 中,资源浏览器的体验得到了显著提升,为开发人员带来了更加赏心悦目的界面,使得资源管理的工作流程更为高效。通过对比新旧两种体验,不难发现,我们不仅弥补了以往体验的不足,还引入了众多令人愉悦的新功能,旨在进一步提升您的工作效率。现在,让我们一同开启这段更加现代、便捷的资源管理之旅吧!
使用分布式事件总线异步通信
使用分布式事件总线在多个微服务之间进行异步通信,订单微服务通知购物车微服务清空用户购物车,产品宽限期校验辅助角色自动任务,订单微服务通知产品微服务进行库存确认,产品微服务通知订单微服务库存确认结果,订单微服务处理库存确认结果。
使用分布式锁解决并发问题
开源 DistributedLock 是一个 .NET 库,它基于各种底层技术提供强大且易于使用的分布式互斥锁、读写器锁和信号量,零度框架中提供分布式锁的基本抽象,并基于 Dapr 实现了分布式锁。
PostgreSQL 高可用性和读写分离
数据库逻辑复制使用发布和订阅模型, 其中一个或多个订阅者订阅发布者节点上的一个或多个发布,订阅者从他们订阅的发布中提取数据,流复制是一种物理复制方法,它通过将 WAL 记录从一个服务器传输到另一个服务器来复制数据。
实现 CQRS 中的 Query 模式
在 CQRS 模式的全程是 Command Query Responsibility Segregation,即命令查询职责分离。在 CQRS 模式中,命令和查询是分开实现的,命令负责写操作,查询负责读操作,这样可以更好地实现单一职责原则,同时也可以更好地实现性能优化。
使用 Aspire 启动分布式微服务
使用 Aspire 启动分布式微服务,包括配置 PostgreSQL 数据库的时间类型为 UTC 时间,删除不优雅的时间转换设置,并推荐使用 TimeProvider 抽象类获取当前时间,以便在测试时更方便地模拟时间。
Aspire 集成 Dapr 和 RabbitMQ
在 Aspire 构建的云原生应用程序中的启动 RabbitMQ 分布式队列,使用 Aspire 启动 Dapr 边车,使用基于环境变量的密钥存储组件配置 Dapr 组件。
使用 Dpar 发布订阅配置分布式事件
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。使用 Bundle 离线初始化 Dapr 运行时。
实现事务性发件箱模式
在分布式系统中,不同的组件需要相互通信,通常通过异步消息传递。发件箱模式提供了一种可靠的方法来处理这些消息。它确保即使系统在执行本地事务之后但在发送消息之前发生故障,消息也不会丢失。相反,它会暂时存储在发件箱中,并在系统恢复时检索和发送。
使用分布式事件实现订单支付库存通知
使用自动任务模拟订单支付成功和失败,使用分布式事件实现订单库存变更,发布和订阅模块使微服务能够使用事件驱动架构的消息相互通信。
使用 Dapr 实现分布式事件总线
Dapr 是一个开源的分布式应用程序运行时,发布和订阅模块使微服务能够使用事件驱动架构的消息相互通信,Dapr 提供了一个事件总线的实现,使用 Dapr 发布事件,提供 Dapr 订阅终结点,将消息路由到不同的事件处理程序。
分布式事件的设计与抽象
分布式事件总线提供了一种在不同的微服务进程之间消息通信的机制,设计分布式事件总线接口,抽象分布式事件,抽象分布式事件处理程序,分布式事件处理程序的依赖注入,基于 Keyed 服务的依赖注入,使用 JsonExtensionDataAttribute 处理溢出的属性。
本地事件的设计与实现
"本地事件总线是一个轻量级的事件总线,用于在应用程序内部的组件之间传递事件,它是一个简单的观察者模式的实现,用于解耦组件之间的依赖关系, 使得组件之间的通信更加简单,在订单创建处理程序中引发事件,使用不同的处理程序处理订单创建事件。"
订单创建命令处理程序
实现创建命令处理程序,订单相关实体数据存储,使用中间件管道进行事务上下文管理,使用执行策略进行事务失败重试,连接复原能力会自动重试失败的数据库命令。
订单的取消和发货命令
实现订单的取消命令,订单取消 WebApi 实现,实现订单的发货命令,订单发货 WebApi 实现,对命令进行规则验证,依赖注入验证器和映射器。
订单接口和命令映射验证管道
实现创建订单 WebApi 接口,构建命令,发送命令,命令去重,请求和命令映射器,请求和命令验证,验证错误封装,使用管道中间件验证命令,命令日志自动记录。
命令模式和消息幂等去重
CQRS 是命令和查询责任分离的英文缩写,它是一种将读取操作和更新操作分离的模式,查询返回结果,不改变系统的状态,没有副作用。命令执行更改系统状态,幂等性是指相同的命令多次执行,结果是一样的,不会有副作用。
订单微服务实体类型设计
订单微服务实体类型设计,未来可使用 Keyed services 方式注入不同连接字符串的同类型 DbContext 类,实现主从数据库的读写分离,实体类型配置,重构代码,提高代码的可维护性和可扩展性。
使用 Azure Data Studio 管理数据库
Azure Data Studio 是一个轻量级的跨平台开源的数据库工具,提供了一个现代化的用户界面,可以帮助用户更轻松地管理各种不同的数据库。
订单微服务架构概述
订单部分使用了很多技术点,这包括 CQRS 模式、本地命令分发、本地事件处理、分布式事件的抽象和实现、发件箱模式、分布式锁等技术。
使用缓存提高系统性能
私有专用缓存,分布式共享缓存,使用 Redis 分布式缓存,使用微软 Garnet 分布式缓存,使用 Window Service 运行 Garnet 缓存,购物车服务使用分布式缓存,高可用性分布式缓存集群,缓存最佳实践,缓存技术点,分布式缓存监控工具,使用 Aspire 分布式缓存组件。
测试 gRPC 购物车服务
使用测试工具生成测试代码,使用 AI 人工智能生成测试代码,单元测试直接从单元测试库测试 gRPC 服务方法,集成测试则需要启动一个测试服务器,然后通过客户端调用服务,使用拦截器模拟身份验证令牌。
使用 gRPC 实现购物车服务
gRPC 是一种与语言无关的高性能远程过程调用,使用消息协定来创建高性能的实时服务,gRPC JSON 转码是为 gRPC 服务创建 RESTful JSON API 的扩展,配置转码后,应用可以使用熟悉的 HTTP 概念调用 gRPC 服务,关于 gRPC 的身份认证授权,模型映射和模型验证。
多租户应用程序设计
多租户应用程序是一种软件架构设计,允许单个实例的软件服务多个客户,每个客户被称为一个租户,租户之间的数据自动隔离的,租户之间的数据不会相互影响。
负载测试和压力测试
负载测试应用在特定情况下处理指定的用户负载能够满足响应目标,压力测试在极端条件下测试应用的稳定性,测试会对应用施加高用户负载,关于 JMeter 测试工具,基准测试用于确定应用程序的性能基准,以便在应用程序的生命周期中进行性能优化。
集成测试最佳实践
集成测试也称为功能测试,与单元测试的不同之处在于,它试验两个或更多软件组件一同工作集成能力。这些测试在更广泛范围的受测系统上运行,而单元测试则侧重于单个组件函数,通常,集成测试会包括对基础结构问题的测试,例如数据库、文件系统和网络资源的交互。
单元测试最佳实践
使用自动测试是确保应用程序代码按作者期望执行操作的一种绝佳方式,零度框架中提供单元测试、集成测试和负载测试,单元测试是一种试验单个软件组件或方法的测试,单元测试仅应测试开发人员控件内的代码,它们不测试基础结构问题,基础结构问题包括与数据库、文件系统和网络资源的交互。
零度框架升级 8.0 稳定版
随着微软 Aspire 正式版的发布,零度框架正式也发布了,之前,零度框架使用的是 Aspire 的多个预览版,导致了一些不稳定的问题,现在,零度框架和所有依赖包都升级到了最新稳定版,不再引用任何预览包,能够更好的部署到生产平台。
聚合 API 网关
使用网关可将多个单独请求聚合成一个请求。 当客户端必须向不同的后端系统发出多个调用来执行某项操作时,此模式非常有用。在某些情况下,客户端需要向多个后端系统发出多个请求。 例如,客户端可能需要从多个服务中检索数据,然后将这些数据聚合到一个响应中。 在这种情况下,客户端必须发出多个请求,这可能会导致性能问题。 此外,客户端还必须处理多个响应,这可能会导致复杂性问题。
聚合 OpenApi 文档
每个微服务都有自己的 OpenApi 文档,但是在实际开发中,我们更希望能够将所有微服务的 OpenApi 文档聚合到一起,以便于查看和调试,微服务都是基于 Aspire 框架开发的,所以我们可以使用 Aspire 框架提供的服务发现功能来自动聚合所有微服务的 OpenApi 文档。
网关和服务发现
API 网关是一个服务器,它是客户端和后端服务之间的中介。它接收来自客户端的请求,然后将这些请求转发到后端服务。基于 BFF(后端用于前端)模式,当客户端请求数据时,API 网关可以调用多个服务来获取数据,然后将数据聚合到一个响应中返回给客户端,以减少客户端与后端服务之间的通信次数,从而提高性能。服务发现是一种用于发现和定位服务的机制,它可以帮助客户端找到服务的位置和地址。服务发现可以用于构建和设计微服务架构中的 API 网关,以便客户端可以通过 API 网关访问后端服务。
实现产品管理微服务
使用基础构建块构建产品管理微服务、创建实体、实体配置、创建模型、自动映射、验证器、控制器、多语言,权限定义等、演示数据生成、模型属性本地化等。
全球化与本地化
全球化 (G11N)使应用支持不同语言和区域的过程。 缩写来自第一个和最后一个字母以及它们之间的字母数,本地化 (L10N)针对特定语言和区域自定义全球化应用的过程,国际化 (I18N)包括全球化和本地化,区域性是一种语言或区域,非特定区域性,具有指定语言但不具有区域的区域性,特定区域性,具有指定语言但和区域的区域性。
分页排序和多条件查询
排序和分页模型设计,生成排序表达式树,实现自动分页和排序方法,扩展 IQueryable 以便通过属性名称排序,扩展 IQueryable 以便搜索和排序,在 API 控制器中使用扩展方法,实现灵活的复杂查询,基于 OData 或者 GraphQL 来实现更复杂的查询。
模型自动验证机制
模型验证可以帮助我们验证用户输入的数据是否符合预期,优雅的使用基于数据注解的验证和基于链式调用的验证规则,提供一个简单、清晰的 API 逻辑,同时还能支持复杂的验证规则,异步验证器,在验证器中依赖注入服务,自定义通用验证错误消息,自动验证器和手动验证器,错误消息的多语言实现。
自动映射实体和模型
AutoMapper 是一个对象映射工具,可以自动映射实体对象和模型对象,减少手动映射的工作量,提高开发效率,除此之外 Mapster 也是一个高性能的对象映射工具,支持源生成代码,性能更好。AutoMapper 比 Mapster 更加流行,更加成熟,更加稳定,更加易用,更加灵活,更加强大,更加全面,更加受欢迎。AutoMapper 是 .NET Foundation 的一部分,是一个开源项目,是一个非常优秀的对象映射工具。
模型绑定最佳实践
实体对象是 EF 中的概念, 每个实体对象对应数据库中的一张表。模型对象是 MVC 中的概念,是 HTTP 请求和响应的数据结构。HTTP 请求中通过 URL 参数、表单、标头、 JSON 数据等方式传递数据,这些数据最终会被绑定为模型对象中,模型经过转换为实体对象后,被持久化到数据库中。
基于资源授权的最佳实践
重构 Identity Service 权限检查端点,重构远程权限检查器,重新实现权限处理程序,取消缓存以便测试,可读性重构,资源信息描述重构,全面测试权限系统。
Copilot 在 Office 中的应用
Copilot 结合了大量的企业数据和先进的人工智能技术,能够理解和执行用户的指令,帮助完成各种任务,如总结文档、撰写电子邮件、搜索信息等。它能够理解自然语言,让用户以对话的方式与之交互,从而简化工作流程,提高工作效率。
基于策略和资源的授权机制
ASP.NET Core 中的授权系统是基于策略的授权系统,可以通过声明式的方式来定义授权策略。授权策略可以基于角色,也可以基于资源,也可以基于其他的条件。授权策略可以通过声明式的方式来定义,也可以通过代码的方式来定义。
实现权限访问控制列表
主体、资源、操作。 例如:用户(主体)对文件(资源)的读写(操作)。主体、资源、操作三者之间的关系称为授权关系,基于这种关系,我们可以将授权关系抽象为一个三元组(主体,资源,操作),这个三元组就是授权的基本单位。
设计权限定义和权限提供者
每个微服务是自治的,权限定义也是每个微服务的职责,各自定义自己的权限,权限管理器会自动合并权限定义,权限定义上下文是微服务内的权限定义和全局权限定义的合集,权限提供者会根据权限定义上下文提供权限数据,权限分组是为了方便权限定义的管理,权限分组是权限定义的一部分,权限提供者自动注入到容器,提供权限查询端点。
使用 JwtBearer 令牌进行身份验证
"JwtBearer 令牌身份验证是一种基于 JSON Web 令牌的身份验证方法, 用于验证用户的身份, 它是一种无状态的身份验证方法, 适用于 Web API 和 Web 应用程序。"
Identity 身份认证和授权终结点
Identity 提供了用户管理、角色管理、声明管理、密码管理、登录管理、外部登录管理、双重身份认证、电子邮件确认、手机号码确认、安全令牌管理、用户锁定、用户解锁、用户注销、用户删除、用户恢复等功能,使用 Identity Api Endpoints 快速构建基于令牌的身份认证授权系统。
使用 OpenAPI 规范生成 API 文档
将 OpenAPI 抽象到一个单独的库中,可以使得 API 项目更加简洁,同时也可以更好地遵循单一职责原则,使得 API 项目更加容易维护。
在项目中添加文件头注释
文件头注释是一种用于说明文件版权和许可的注释。它通常包括版权声明、许可证信息、作者信息和其他相关信息,文件头注释是一种很好的实践,可以帮助开发人员了解文件的版权和许可信息。
用于生成初始数据的提供程序
数据播种是使用一组初始数据填充数据库的过程,通常在数据库首次创建时执行,这些数据通常是静态的,不会随时间变化,数据播种通常用于填充一些基本数据,例如用户、角色、权限、商品、分类等。
使用 PostgreSQL 数据库存储数据
在 Docker 中 启动 PostgreSQL 数据库,使用 PgAdmin 连接 PostgreSQL 数据库,EfCore 使用 PostgreSQL 数据库,命名约定,使用脚本迁移,列迁移排序,时间自动转换配置。
更新 .NET 8.0 到 .NET 9.0
安装更新 Visual Studio 最新预览版,安装 .NET 9.0 SDK,更新所有 NuGet 包到最新版本,更新 Aspire 和 MAUI 工作负载,将 Tab 自动补全添加到适用于 .NET CLI 的 PowerShell 命令行工具。
C# 12 中的新增功能
主构造函数是一个类的构造函数,它在类的声明中声明,而不是在类的主体中声明。主构造函数的参数可以用于初始化类的属性,集合表达式是一种新的语法,用于初始化集合,可以为 Lambda 提供默认参数,展开运算符可以快捷连接数组,元组等类型支持别名。
创建解决方案和项目结构
使用 .NET Aspire 构建分布式应用程序,包含了一系列的库、框架、工具和命令行实用程序,用于构建和管理可扩展的分布式应用程序,它还包括一组可扩展的基于微服务的框架,用于构建可靠的、可扩展的、事件驱动的微服务,这些微服务运行在 Docker 容器中,使用 Blazor 开发的前端应用程序,使用 MAUI 开发跨平台的移动应用程序,可以快速的进行开发,提高开发效率。
制作动态流程图和架构图
学习开源的画图工具,分享一些画图经验和技巧,容器图,图形和连接线,浮动连接和固定连接的区别,自带样式,矢量图和位图,嵌入图像和在线图像,使用第三方开源图标库中的素材,如何优雅地画流程图和架构图,添加连接线动画,更复杂的动态架构图制作方法。
使用 EditorConfig 约定编码风格
EditorConfig 有助于为跨不同编辑器和 IDE 处理同一项目的多个开发人员保持一致的编码风格。EditorConfig 项目由用于定义编码样式的文件格式和文本编辑器插件集合组成,这些插件使编辑器能够读取文件格式并遵循定义的样式。EditorConfig 文件易于读取,并且与版本控制系统配合得很好。
零度新版框架搭建概况
朋友们,零度新一代基架今日正式开始搭建。我们非常激动地宣布,新一代基架起名为 HelloShop 项目, 演示新一代 .NET 技术栈开发架构,之所以起名为 HelloShop 是以为简单的商店应用能够演示出一个系统的所有技术,当然,这个商城系统也可以是其它系统,只要你能够理解这个基架的设计思想,你就能够快速搭建一个系统。
使用解决方案筛选器提升性能
大型开发团队经常需要在包含众多项目的单个大型解决方案中进行协作。然而,每个开发人员通常只关注其中的一小部分项目。为了提高在处理大型解决方案时的性能,Visual Studio 推出了解决方案筛选功能。此功能允许开发人员仅加载他们需要的特定项目,而不是整个解决方案。通过仅加载解决方案中的一部分项目,可以显著降低解决方案的加载、构建和测试运行时间,从而实现更高效的审查和协作。
将代码同步到多个远程存储库
将本地 Git 存储库同步到多个远程存储库,支持个远程存储库配置,以 Github 和 Gitee 为例,配置多个远程存储库,将本地 Git 存储库同步到 Github 和 Gitee 远程库。
创建和克隆存储库
"将远程存储库克隆到本地,在本地进行修改,然后提交到远程存储库,在本地创建存储库,然后将本地存储库推送到远程存储库,关于代码存储库的命名规范使用 KebabCaseLower 命名法。"
在一个工作区中管理多个存储库
Visual Studio 可以管理多个存储库,多存储库支持意味着可以使用跨多个存储库的解决方案,同时跨多个存储库应用 Git 操作。 例如,在大型 Web 项目中,可能需要不同的存储库来管理在前端、API、数据库、文档以及各种库和依赖项上完成的工作。
历时记录和冲突合并
Visual Studio 中 Git 冲突解决包括合并冲突、撤销合并、继续合并、放弃合并、使用本地版本、使用远程版本、使用基础版本、使用合并工具。
版本跟踪和提交标签
版本历时可以跟踪文件的修改,可以查看文件的修改记录,可以恢复文件的修改记录,Git 标签可以用于标记版本。
分支管理和储藏功能
分支管理包括创建、切换、合并、删除、重命名、查看、比较、拉取、推送、同步,储藏用于暂存、应用、弹出、列出、删除。
文件暂存和行级暂存
Visual Studio 中的 Git 支持文件暂存和行级暂存,在提交之前,可以选择性的将文件或者文件的某一行添加到暂存区,然后再一次性提交到仓库。
关于 Git 相关的操作
克隆、远程仓库、本地仓库、仓库的设置、提取、拉取、提交、撤销更改、推送、同步。
使用脚手架自动生成代码
脚手架是一种代码生成器,它可以根据模板生成代码。ASP.NET Core 脚手架是一个基于命令行的代码生成器,它可以生成基于 ASP.NET Core 的 Web 应用程序和代码。脚手架可以生成基于 MVC 和 Web API 的项目,还可以生成基于 Razor Pages 的项目。脚手架还可以生成控制器、视图和数据访问代码,以及用于测试的基础单元测试代码。
使用 .NET 迁移助手升级项目
.NET 升级助手是一个工具,可帮助您将老项目迁移到最新 .NET 框架的工具,它可以帮助您识别项目中的依赖项和 API 使用情况,为项目提供 .NET 目标框架的建议,提供升级项目所需的代码更改。
使用 PostgreSQL 数据库
PostgreSQL是一种开源关系型数据库管理系统,具有强大的性能、可靠性和可扩展性。它支持SQL标准,并提供许多先进的功能,如全文搜索、存储过程、事务隔离级别和数据复制。PostgreSQL可以运行在多种操作系统上,并提供了丰富的编程接口和工具,方便用户进行数据管理和开发。
优雅的命名规范和框架设计准则
帮助开发者了解和掌握.NET平台上的编码规范和最佳实践,以提高代码的质量、可读性和可维护性。
使用 AI 技术实现智能化编程
人工智能代码辅助工具,它利用机器学习模型来生成智能的代码补全建议。该工具可以大大加速代码编写过程,提高开发效率,并减少编写重复代码的工作量。
日期时间和字符串格式化器
日期时间处理与格式化,日期时间的表示,格式化日期时间,解析日期时间,日期时间的运算,自定义日期时间格式化模板。
.NET技术栈技术体系图
在线画一个 .NET 技术栈体系结构图,用 .NET 技术可以解决哪些问题呢?
使用 VS2022 中的 HTTP 文件
在 Visual Studio 2022 的升级包中,文件编辑器提供了一种便捷的测试 ASP.NET Core 和 WebApi 的方式,终结点资源管理器是 Visual Studio 2022 中的一个工具窗口,它提供与 HTTP 文件编辑器集成的 UI 支持,用于测试 HTTP 请求。
使用 Visual Studio 中的开发隧道
使用 Visual Studio 2022 的开发隧道功能可以在无法直接相互连接的计算机之间建立临时连接。 创建一个 URL,使任何具有 Internet 连接的设备在 localhost 上运行时都可以连接到 ASP.NET Core 项目。
微软 Build 2023 开发者大会直播
微软年度开发者大会 Build 2023 在西雅图开幕,面对当今由AI引领的技术趋势,微软向超过20万名注册参会的开发者集中展示人工智能如何给软件开发的对象、过程和工具带来巨大变革,并重新定义工作方式的未来。微软将发布超过50项新产品、新功能、新服务,助力全球开发者共同把握新一轮技术变革带来的创新机遇。
第01期-模型绑定文件上传方案
ASP.NET Core 针对较小文件,支持使用缓冲的 IFormFile 和 IFormFileCollection 模型绑定上传一个或多个文件,基于 AJAX 异步上传文件,使用缓冲的模型绑定文件上传,大于 64 KB 的单个缓冲文件将从内存移到磁盘的临时空间。
第11期-职业规划大家谈系列之三
学历与经验到底哪个更重要,多高的学历才够用,专业与工作必须挂钩吗,好的工作环境很重要,如何利用不同的工作环境提升自己的个人价值,如何为自己定位技术方向,多而广和少而精,如何提升个人在企业中的价值,职业路线中的坎,到底要不要跳槽,多久跳槽合适,跳槽频繁程度,什么时候跳槽合适,如何选择目标职位。
第03期-谈谈面试求职与工作
与大家谈谈求职中的简历模板,写好优秀的简历内容,精准自我定位,简历投寄方式与技巧,公司规模与经营内容调查,工作岗位分析,应聘时间计划与安排,面试沟通方式,谈薪资的方式,如何定位职业规划,打造属于自己的核心竞争力,自我提升、平台和未来战略的重要性与影响。
第02期-流式大文件上传方案
针对较大文件,可用 ASP.NET Core 无缓冲的流式方式上传一个或多个文件,安全注意事项,存储方案,文件扩展名验证,文件签名验证,文件名安全,大小验证,断点下载和分片续传。
第12期-职业规划大家谈系列之四
本视频主要解答大家在求职和面试过程中遇到的问题,由微软专家及业内人士与您共同探讨如何更加合理的规划您的职业生涯,我们希望通过这样的一个互动平台,能够让大家一同分析目前中国专业人士的问题,挑战与机遇,进而一同探讨如何应对挑战,把握机遇,为自己规划一条成功的IT之路。
第10期-职业规划大家谈系列之二
入门容易入行难,学技术还是定方向?行业的未来跟自己的前程,身处十字路口,你需要指南针吗? 天才和工程师,给我一堆源代码,微软大佬回答大家在职业规划过程中的问题。
第09期-我的.NET之路
相信你是一个IT路上的人,或是将要走向IT路上的人,你的IT路要怎么去走呢?希望用我的 .NET 之路,能给你带来帮助,我将从自己 .NET 的学习方法,和怎样对待学习两个角度,介绍一下自己的IT成长的经验。
第08期-程序员职业规划谈
大多数程序员并没有很好地把握自己的职业生涯,他们不知道如何去实现自己的职业目标,或者不知道要实现什么样的目标,学会科学的选择规划好适合自己发展的路线,编程人员在不同职位上所应具有的基本素质,分享良好的学习方法,工作技巧,结合我个人的经历和所遇到的困难,以及解决方法等。
第07期-IT生涯路在何方
如何在技术专业与管理领域寻求平衡,如何突破职业发展的瓶颈,是我们需要面对和思考的问题,我将以十年的IT从业经验,从工程师到技术总监成长经历,讲述我对IT人员职业生涯规划和进阶成长路线的理解,讲述如何定义成功,如何找到一条属于自己IT生涯的成功之路。
第06期-如何成为一名合格的IT专家
什么是职业规划?作为即将开始工作的准IT人士,我们该如何制定自己的职业目标,如何高效学习从而储备自己的技能,如何合理地规划自己的职业生涯?本主题以演讲者自己十余年的工作经历,和大家一起分享关于职业规划的系列知识。
第05期-青梅煮酒论职业
本课程从我个人实际经历出发,和大家一起探讨求职面试的一些技巧,人生职业生涯的规划,如何从如此高压力,高竞争力下脱颖而出,希望能藉此课程,能给您带来一些新的职业规划构思。
第04期-职业发展初期的问题与思考
作为职业规划经验谈系列的一部分,本次内容主要为即将毕业和刚毕业走上工作岗位的朋友们设计,我们将以若干个职业发展初期的常见问题作为范例,与大家一起探索和思考如何获得更好的发展。
第03期-IT项目经验和难点分享
项目普遍具有紧迫性、独特性和不确定性等特点,用专业语言表述,项目管理就是在确保时间、经费和性能指标的三项限制条件下,尽可能高效率地完成项目任务,从运作中改善中层管理人员的工作效率,我们将结合部分项目实施与运维经验,与听众探讨项目建设实施与项目运维过程中常见的问题,以及如何做好项目。
第02期-IT专业人士如何更有效的学习专业知识
"结合个人经验,探讨IT领域的学习线路和学习方法,关于内功和套路,学习效率,学习习惯,如何提问,纠正一些错误的学习观点,并跟大家一起探讨如何更加有效,有针对性地进行专业知识的学习。"
第01期-IT职业规划经验谈
在从事多年微软教育工作后,我最终加入了微软,IT业内也许有很多朋友知道我但不了解我,也有很多朋友认为我很神秘,那么好吧,就通过这次机会让我们互相了解吧,我会和大家分享我多年来积攒的很多成功和失败的经验,并谈谈我对IT职业规划的看法。
第25期-设计模式总结
设计模式建立在对系统变化点的基础上进行,哪里有变化点,哪里应用设计模式,设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能准确定位,不能为了模式而模式,设计模式是一种软件设计的软力量,而非规范标准,不应夸大设计模式的作用。
第24期-Visitor访问者模式
类层次结构中可能经常由于引入新的操作,从而将类型变得脆弱,由于需求的改变,某些类层次结构中常常需要增加新的行为方法,如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。
第23期-Strategy策略模式
对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。策略模式定义一系列算法,把它们一个个封装起来,并且使它们可互相替换,该模式使得算法可独立于使用它的客户而变化。
第22期-State状态模式
对象拥有不同的状态,往往会行使不同的行为,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同,如何在运行时根据对象的状态来透明地更改对象的行为,而不会为对象操作和状态转化之间引入紧耦合?状态模式允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为。
第21期-Memento备忘录模式
对象状态的变化无端,如何回溯或恢复对象在某个点的状态?某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态,如果使用一些公有接口来让其它对象得到对象的状态,便会暴露对象的细节实现,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。
第20期-ChainOfResponsibility职责链模式
一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
第19期-Observer观察者模式
我们需要为某些对象建立一种通知依赖关系,当目标对象的状态发生改变,所有的依赖对象都将得到通知,如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系,从而实现软件体系结构的松耦合,定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新,学习 .NET 框架中的观察者模式。
第18期-Iterator迭代器模式
集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素,同时这种透明遍历也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为迭代器对象为应对变化中的集合对象提供了一种优雅的方式。迭代器模式可提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
第17期-Mediator中介者模式
在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可使用一个中介对象来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。学习 .NET 架构中的中介者模式。
第16期-Interpreter解释器模式
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。关于 .NET 架构中的解释器模式。
第15期-Command命令模式
耦合是软件不能抵御变化灾难的根本性原因,不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系。在软件构建过程中,行为请求者与实现者通常呈现一种紧耦合,但在某些场合,这种无法抵御变化的紧耦合是不合适的,命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作,关于.NET 架构中的命令模式。
第14期-TemplateMethod模板方法模式
如果你只想掌握一种设计模式,那么它就是模板方法,变化是软件设计的永恒主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现系统中的变化点和稳定点,并使用特定的设计方法来应对这种变化,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,关于 .NET 框架中模板方法模式的应用。
第13期-Proxy代理模式
人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活并满足特定需求的解决方案,在面向对象系统中,有些对象由于某种原因,直接访问会给使用者或者系统结构带来很多麻烦,如何在不失去透明操作对象的同时来管理控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式,代理模式为其它对象提供一种代理以控制对这个对象的访问,在 .NET 架构中关于代理模式的应用。
第12期-Flyweight享元模式
面向对象很好地解决了系统抽象性的问题,在大多数情况下,也不会损及系统的性能,但是,在某些特殊的应用中,由于对象的数量太多,采用面向对象会给系统带来难以承受的内存开销,如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?运用共享技术有效地支持大量细粒度的对象,关于 .NET 架构中的享元模式的应用。
第11期-Facade外观模式
如何简化外部客户程序与系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用,从客户程序的角度来看,外观模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种解耦的效果。
第10期-Decorator装饰模式
子类复子类,子类何其多,过度使用了继承来扩展对象的功能,使得这种扩展方式缺乏灵活性,并且随着子类的增多,各种子类的组合会导致更多子类的膨胀,装饰模式可动态地给一个对象增加一些额外的职责,就增加功能而言,装饰模式比生成子类更为灵活,理解 .NET 框架中关于装饰模式的应用,
第09期-Composite组合模式
在面向对象系统中,我们常会遇到一类具有容器特征的对象,它们在充当对象的同时,又是其它对象的容器,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构的变化将引起客户代码的频繁变化,组合模式将对象组合成树形结构以表示部分与整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,组合模式在 .NET 框架中的应用。
第08期-Bridge桥接模式
将抽象部分与实现部分分离,使它们都可以独立地变化,桥接模式使用对象间的组合关系解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化,桥接模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则,复用性比较差,桥接模式是比多继承方案更好的解决方法。
第07期-Adapter适配器模式
适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口,在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的,如何应对这种迁移的变化?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,写个示例演示适配器模式,对象适配器与类适配器的结构,适配器模式在.NET框架中的的应用。
第06期-Prototype原型模式
抽象不应该依赖于实现细节,实现细节应该依赖于抽象,如何应对需求的变化,如何向客户程序隔离出这些易变对象,从而使得依赖这些易变对象的客户程序不随着需求改变而改变,使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象,原型模式的要点,有关创建型模式的讨论。
第05期-FactoryMethod工厂方法模式
耦合关系直接决定着软件面对变化时的行为,模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改,模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其它模块保持不变,在软件系统中,经常面临着某个对象的创建工作,由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的实例化延迟到子类,理解工厂方法模式的要点,关于 .NET 框架中工厂方法模式的应用。
第04期-Builder生成器模式
在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定,将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,关于 .NET 框架中 Builder 模式的应用。
第03期-AbstractFactory抽象工厂模式
常规的对象创建方法不能应对具体实例化类型的变化,封装变化点,哪里变化,封装哪里,工厂模式的缘起,面向接口编程,而非依赖实现,创建一系列相互依赖的对象,认识简单工厂的问题,使用面向对象的技术来封装变化点,提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类,游戏框架中的抽象工厂模式应用,理解 .NET 框架中的抽象工厂模式的应用。
第02期-Singleton单例模式
从目的来看,设计模式分为创建型、结构型和行为型,从范围来看,类模式处理类与子类的静态关系,对象模式处理对象间的动态关系,单例模式可保证一个类仅有一个实例,并提供一个该实例的全局访问点,单线程与多线程单例模式的实现,使用 .NET 类型初始化机制实现多线程单例模式,关于单例模式的扩展方案,学习 .NET 框架中单例模式的应用。
第01期-面向对象设计模式与原则
了解 GoF 23 种设计模,设计模式与面向对象的关系,从编程语言直观了解面向对象,理解封装、继承和多态,从一个 C# 示例开始,重新认识面向对象,从设计原则到设计模式的演变,针对接口编程,而不是针对实现编程,优先使用对象组合,而不是类继承,封装变化点,使用重构得到模式,SRP 单一职责原,OCP 开放封闭原,LSP 里氏替换原则,DIP 依赖倒置原则,ISP 接口隔离原则。
第62期-零度微框架的升级与使用
将项目引用的全部组件升级为最新版,更改大量代码以兼容最新组件,卸载无用的第三方组件,启动并运行零度微框架,使用零度微框架开发自己的应用,创建领域模型,映射数据关系,创建服务接口,实现服务接口,依赖注入服务配置,模型配置,创建模型验证器,编写控制器和相关操作,配置分页方式,用模板快速生成视图界面,操作权限配置,创建后台自动任务,自动任务的灵活配置。
第61期-WebAPI第15课(文档生成&特性)
微软内置的 WebAPI 帮助文档配置,使帮助文档支持在线测试,静态帮助文档生成工具,使用 Swashbuckle 生成 Swagger 风格帮助文档,关于一些非常有用的 Attribute 特性,自定义模型绑定处理程序。
第60期-WebAPI第14课(OData&技巧&扩展)
理解 OData 协议,在 WebAPI 中配置 OData 协议,使用 Visual Studio 调试 WebAPI 框架源码,BSON 媒体格式化器,模型验证,依赖注入容器,路由调试工具,日志跟踪器,性能分析,使用 Cookie 存储数据,消息处理程序。
第59期-WebAPI第13课(扩展认证授权服务器)
在前端页面实现认证与授权,定制登录与授权页面模板,自定义用户、范围和客户端存储方式,使用EF框架存储用户、客户端和范围数据,通过界面管理用于与角色,第三方认证方式,单点登录与安全。
第58期-WebAPI第12课(用户角色客户端授权)
使用日志跟踪 IdentityServer 框架的执行流程与异常,用户、客户端和认证服务器三方参与模式,从零开始构建认证服务器,实现基于用户角色的 ASP.NET MVC 认证与授权管理器。
第57期-WebAPI第11课(客户端角色授权)
基于 OpenID Connect 认证,用户,客户端和范围,不同场景的认证模型。使用 IdentityServer 实现认证服务器和 WebAPI 资源授权,基于客户端角色的授权管理器,编写客户端申请令牌并访问 WebAPI 接口。
第56期-WebAPI第10课(客户端令牌认证)
基于令牌的认证与授权,理解 OpenID 认证流程,理解 OAuth 授权协议,在 WebAPI 中使用 IdentityServer 框架实现基于令牌的客户端身份认证。
第55期-WebAPI第09课(认证&授权&跨域)
基于令牌的身份认证,Cookie令牌,SAML令牌协议,JWT协议,Hawk加密协议。授权中的主体、操作和资源,授权过程中决策、决定和执行。同源策略与跨域,WebAPI中实现JSONP与CORS跨域方案。
第54期-WebAPI第08课(身份认证)
认证与授权的区别,微软 .NET 中的身份标识,Windows 认证和 From 表单认证,基于 HTTP 的基本身份认证,使用过滤器实现身份认证,其它类型的身份认证。
第53期-WebAPI第07课(安全与证书)
WebAPI 传输安全,消息的完整性与保密性,基于 SSL 的 HTTPS 协议介绍,理解加密算法,对称加密,非对称加密,摘要算法,数字签名,可信任的CA证书颁发机构,申请免费的SSL证书,在IIS中绑定证书实现HTTPS安全传输,自托管证书绑定。
第52期-WebAPI第06课(验证&缓存&访问)
模型验证,基于 DataAnnotations 验证与 FluentValidation 验证,在 WebAPI 中使用缓存组件,使用 HttpClient 访问 WebAPI 接口。
第51期-WebAPI第05课(模型绑定)
模型绑定的优点,参数绑定与参数描述,自定义绑定,内置的模型绑定器,URL参数绑定,格式化器参数绑定,请求正文绑定,值提供程序,自定义值提供程序与工厂。
第50期-WebAPI第04课(执行流程)
理解 WebAPI 的路由与配置,请求处理管道,请求处理的详细流程,认证过滤器,授权过滤器,执行前后过滤器,异常过滤器,过滤器的优先级,模型验证,自定义模型验证过滤器,内置返回类型转换器。
第49期-WebAPI第03课(宿主)
了解 ASP.NET 框架,应用程序、模块和处理程序,理解 ASP.NET MVC 请求处理流程,使用IIS托管,自托管,OWIN规范介绍,内存托管和微软云托管。
第48期-WebAPI第02课(架构模型)
基于REST的架构风格,WebAPI处理架构,HttpRequestMessage 与 HttpResponseMessage,StringContent、ByteArrayContent,StreamContent,PushStreamContent和ObjectContent,自定义 FileContent 内容,WebAPI架构图,请求处理流程,WEB托管、自托管和OWIN托管。
第47期-WebAPI第01课(基础模型)
理解 WebAPI 和 WCF 的区别,SOAP 协议和 HTTP 协议,GET、POST、PUT 和 DELETE 方法,幂等性,表示资源,写一些简单的 WebAPI 接口,使用 Fiddler 工具测试接口,版本演化管理,格式化器,请求与响应封装模型。
第46期-使用WP搭建自己的网站
零度网站改版展示,界面风格选择,微软风格,网站专注内容,知名网站内容管理系统 CMS 介绍,基于 .NET 框架的开源 CMS 系统介绍,学习 WordPress 开源博客系统,网站搜索引擎优化,响应式布局, 快速安装并使用 WordPress 博客系统,搭建属于自己的个人网站,网站访问量统计。
第45期-C#中的类型
学习C#中的基本类型,面向对象的编程思想,访问修饰符,字段,属性,合理使用基础类型,何时使用异常,接口与抽象类的区别,理解面向对象的三大特征:封装、继承和多态,理解面向对象的基本原则。
第44期-介绍.NET平台
介绍C#语言,面向对象特征,介绍 Object 类型,基于.NET的基本类型,关于CLR、CIL、CTS、CLS、CLI、BCL和FCL的区别,C#与.NET的关系,语言特性和基本写法。
第43期-VS中的项目属性2
不同项目模板项目属性的区别,WEB项目属性介绍,配置 IIS Express 服务器,打包发布WEB属性,介绍 Nuget 包管理器配置,配置文件中的程序集依赖重定向,程序集版本与平台,全局GAC程序集缓存,研究程序集加载机制,嵌套项目文件,添加为文件链接,默认项模板和项目模板。
第42期-VS中的项目属性1
研究 Visual Studio 中的项目属性,理解项目属性中的:应用程序、生成、生成事件、调试、资源、服务、设置、引用路径、签名、安全性、发布和代码分析功能。
第41期-VS2017&MSSQL2017
介绍 Visual Studio 2017 企业版,安装选项、修复与扩展、工作负载和组件,如彻底完美优雅的卸载历史版本,使用 SQL Server 2017 数据库,解决常见问题,VS中的项目属性介绍。
第40期-微框架开源与演示
演示零度微框架完整版,并开放源代码,演示核心库,数据层,服务层,应用层核心库,应用层:使用零度微框架开发自己的应用,从零开始实现仓储、服务、使用缓存、控制器、自动生成视图、分页、菜单管理和权限配置。
第39期-微信平台开发2
微信高级功能介绍,微信群发功能,实现微信机器人,微信推送中的模板消息,自定义微信配置文件,配置管理器,加载配置文件,实现微信处理程序,微信网页授权,实现微信与网站用户绑定方案,自动推送实现。
第38期-依赖注入配置
在项目中引用 Unity 依赖注入框架,通过 XML 配置依赖注入容器,通过 XSD 让配置文件实现智能提示,将接口与实现配置到容器,在 Unity 中加载配置文件,多配置文件的加载,依赖注入生命周期配置,构造函数注入、方法注入和属性注入,泛型类型的注入与配置。
第37期-微信平台开发1
在 IIS 中设置部署自动任务,记录 Quartz 的活动日志, 自定义日志提供程序。微信开发介绍,开发接口文档,开发模型架构,在 ASP.NET MVC 中使用微信 SDK 开发应用,实现微信处理程序。
第36期-定时任务2
在 ASP.NET MVC 中使用 Quartz.NET 框架,实现定时任务激活器,自定义配置文件,加载配置文件,动态配置JOB任务,Quartz.NET 与 依赖注入 Unity 容器的集成,关于JOB任务的依赖注入,自定义任务调度器工厂。
第35期-定时任务1
介绍定时任务,微软的任务计划管理器,Timer、WebBackgrounder、Hangfire 和 Quartz 定时任务框架比较,使用 Timer 写一个简单的定时任务,介绍 Quartz.NET 定时任务框架,介绍 Quartz.NET 的编程模型,编写一个简单的定时任务,编写 JOB 任务、触发器和调度器,定时任务 CRON 表达式,CRON 表达式生成器,多触发器设置,在 IIS 中设置应用程序池回收间隔。
第34期-异常与日志4
自定义企业库异常处理器,日志记录测试,异常记录,自定义日志处理程序,企业库配置工具介绍,通过异常处理机制跟踪 ASP.NET MVC 中的异常。
第33期-异常与日志3
创建日志模型,生成日志表,企业库日志处理模块,重写微软格式化日志监听器,日志错误级别,日志格式化XML与JSON方式保存,自定义日志格式化跟踪监听器配置节点,企业库日志配置,企业库日志激活器。
第32期-异常与日志2
复习 ASP.NET MVC 中的异常机制,通过 HandleErrorAttribute 实现自定义的异常处理机制,关于HTTP中的400和500错误,通过断点调试的方式,跟踪 ASP.NET MVC 中的异常处理机制,通过激活器启动异常处理HTTP模块,异常拦截与处理策略,使用微软企业库处理异常,企业库激活器实现,配置企业库异常处理策略。
第31期-异常与日志1
介绍 .NET 开发中的异常处理机制,异常的重要性,异常的用法,何时使用异常。关于 ASP.NET MVC 中的异常处理流程,介绍 HandleErrorAttribute 特性,自定义异常展示模板,MVC 控制器异常捕获,ASP.NET 全局异常捕获,通过配置文件处理404错误。
第30期-MVC权限设计4
ASP.NET MVC 中的图片上传插件推荐,图片实时预览,图片上传进度展示,批量上传图片,AJAX异步上传,拖拽上传,粘贴上传。数据权限与操作权限的区别,数据访问权限的设计与开发,无限级菜单类设计,实体权限服务接口设计,导航权限实现,细粒度按钮权限实现。
第29期-MVC权限设计3
使用授权 Attribute 为 Action 分配权限,登录界面设计,登录功能的代码实现,设计授权提供者接口,实现基于表单验证的登录和登出功能,设计权限服务接口,并实现权限接口,设计用户工作上下文接口,实现用户上下文接口。
第28期-MVC权限设计2
介绍和调试 PowerShell 权限脚本,权限配置界面设计和开发,用户管理、角色管理、授权管理,为用户角色分配权限,功能点、Action和权限名的关系,设计授权 Attribute 特性,实现授权特性,验证授权与权限。
第27期-MVC权限设计1
ASP.NET MVC 中的权限设计概要,设计权限表结构,通过 EF Code First 创建资源、用户和角色表,权限记录配置,通过 PowerShell 脚本自动生成权限记录。
第26期-导出Excel表格&性能分析
关于实现灵活可扩展的 Excel 导出工具的一些问题解决,性能分析简介,在 ASP.NET MVC 中深度集成 MiniProfiler 性能分析工具,自定义激活器与灵活配置,并与零度微框架深度集成。
第25期-用MVC导出Excel表格
介绍.NET平台上导出 Excel 表格的各种组件,分析利弊,最终选择在零度微框架中集成 Epplus 组件、将 Excel 组件与 ASP.NET MVC 框架深度集成,实现灵活可扩展的 Excel 导出工具。
第24期-后台界面&微软战略
介绍 Nfine 框架和 DTCMS 开源框架,前端 AdminlLTE 后台模板介绍。微软 Connect 大会中的 .NET 技术介绍,微软开源战略,微软 .NET 学习资料分享,开发工具简介,微软目前的跨平台战略。
第23期-MVC文件夹介绍&权限分析
讲解数据库模型和视图模型的区别,介绍 ASP.NET MVC 文件夹,资源文件夹,AppData文件夹,AppCode文件夹,模板文件夹,字体文件夹,链式设计思路,视图文件夹,ASP.NET MVC 权限设计分析。
第22期-依赖注入生命周期
深入研究 IIS Express 服务器,配置服务器。关于 Unity 依赖注入容器启动和卸载异常,Unity 中的生命周期,关于零度微框架对象的生命周期,容器生命周期配置。基于角色的权限系统设计概述。
第21期-VS插件推荐
接着上节课继续介绍 Visual Studio 最有价值的多款插件,帮你提高开发效率,使用 ILSpy 反编译程序集,反向工程,演示 Visual Studio SDK 中提供的插件示例。
第20期-Unity配置文件&VS插件推荐
使用 XML 配置 Unity 依赖注入容器,配置文件中的智能提示。BrowserLink、多浏览器同步与测试,介绍 Visual Studio 最有价值的插件,帮您节约开发时间。
第19期-MVC框架模板机制
介绍并研究微软 ASP.NET MVC 模板的生成机制,在 Visual Studio 中定制自己的模板,开发自定义的 ASP.NET MVC 模板生成机制。
第18期-在VS中使用T4模板
.NET程序启动过程,介绍程序域,创建程序域,向程序域中动态加载程序集,卸载程序域,T4模板宿主,在代码中调用T4模板生成,在 Visual Studio 插件中使用T4模板。
第17期-MEF插件开发&T4模板
介绍原始的插件开发方式,使用微软MEF框架实现自己的插件系统,在 Visual Studio 中是使用T4模板自动生成代码,提高开发效率。
第16期-用VS开发插件&MEF插件框架介绍
使用 Visual Studio SDK 开发 Visual Studio 插件,开发代码段插件、菜单命令、窗体插件、工具栏插件、项模板、项目模板、解决方案工具条,示例插件介绍。关于微软MEF插件开发平台介绍并入门,使用 MEF 开发一个简单的支付插件。
第15期-用VS开发插件入门
开源零度微框架源码和基于微框架的插件,介绍 Visual Studio SDK 插件开发,下载微软演示代码,基本对象和开发模型介绍,项模板和项目模板,插件项目介绍,开发一个简单的插件,生成并部署插件。
第14期-WebAPI入门与技巧2
实时推送框架 SignalR 介绍,实时聊天功能示例演示,通过 SignalR 向客户端实时推送服务器 CPU 使用率,并通过折线图显示。介绍 HttpClient 客户端,请求管道与处理程序介绍,实现自己的 Handler 处理程序,写一些简单的 Web API 示例,文档生成机制,自定义媒体格式化器,Web API 中的依赖注入,通过 Unity 实现依赖注入容器,在微框架中集成 Web API 框架。
第13期-WebAPI入门与技巧1
介绍 REST 架构风格,通过模板生成控制器方法,通过 EF Code First 创建数据库,同源策略与跨域介绍,通过 JSONP 和 CORS 实现跨域,生成 Web API 在线帮助文档,生成体验更好的帮助文档,自定义内容格式协商器,自宿主 Web API 项目。
第12期-用MVC和EF搭建框架5
介绍异常处理,ASP.NET MVC 中的异常处理机制与日志记录,依赖注入日志框架,异常处理过滤器,使用 Bundle 绑定样式和脚本并压缩,启用 CDN 支持,防止 CSRF 跨站伪造请求 与 XSS 跨站脚本注入攻击,ASP.NET MVC 视图引擎,自定义视图引擎,实现可切换的主题风格样式,如何使用视图、母版和部分页优雅地布局UI界面,自定义显示和编辑共享模板,扩展 HmlHelper 帮助器,使用 ASP.NET MVC 中的 AjaxHelper 实现异步请求。
第11期-用MVC和EF搭建框架4
自定义验证提示消息,通过资源文件实现多语言通用错误提示模板,通过资源文件实现多语言模型字段显示名,领域模型与视图模型的区别,通过 AutoMapper 映射模型,构建可扩展的模型映射器,依赖注入映射器,菜单权限介绍,自定义视图基类,实现视图多语言。
第10期-用MVC和EF搭建框架3
自定义 ASP.NET MVC 框架的视图模板机制,自定义UI界面,T4模板编辑器,用 JSON.NET 替换 ASP.NET MVC 默认的 JSON 序列化器,模型验证,客户端验证与后端验证,使用 FluentValidation 自定义链式验证器,配置扩展激活器,依赖注入验证器。
第09期-用MVC和EF搭建框架2
用 EF Code First 创建数据库 DbContext 上下文,创建上下文抽象 IDbContext 接口,实现基于 EF 的仓储类,实现基本的 CRUD 操作,启用迁移生成数据库,创建服务接口,实现服务接口,将仓储通过构造函数注入到服务类,在服务类中使用缓存,通过全局服务容器封装依赖注入,自定义类型查找器接口,实现程序域类型查找器和 Web 类型查找器。
第08期-用MVC和EF搭建框架1
介绍 GitHub 使用技巧,创建 WebAPI 项目,创建仓储 IRepository 接口,创建缓存管理 ICacheManager 接口,实现内存缓存、Redis 分布式缓存和空缓存,实现自定义的配置节,定义日志接口与具体实现,领域模型基础类,将缓存接口与实现注入到依赖注入容器,配置 Unity 依赖容器。
第07期-EF批量数据&死锁检测&事务&并发
介绍 SQL Server 大数据解决方案,表分区,使用EF扩展框架,批量更新与删除数据,批量查询,缓存查询结果,SQL Server 中的事务,在 SQL Server 中通过分析工具检索并解决死锁问题,ADO.NET 中使用事务,文件系统 TXF 事务,分布式事务,EF 中的事务,关于 EF 中的并发问题,EF 上下文中的数据行版本,在 EF 中查看 SQL 语句。
第06期-VsCode&NetCore
介绍 .NET Core 平台架构,跨平台开发,在 Visual Studio Code 中开发 .NET Core 应用程序,配置文件,断点调试,开发控制台应用程序、Web应用、多平台应用、数据库应用等。
第05期-创建MVC&EF项目
简单介绍 SQL Server 2016 的安装方法, 创建 ASP.NET MVC 项目,使用 EF Code First 自动迁移数据库,使用 AdminLTE 模板布局后台页面,使用模板页和部分视图的使用,使用 StyleBundle 和 ScriptBundle 引用样式和脚本,自定义视图基类,多语言实现。
第04期-异步多线程编程模型
介绍多核CPU,超线程技术,进程,程序域,主线程和后台线程,线程池,线程同步和死锁,异步,异步委托,事件异步,任务异步,APM、EAP 和 TAP 之间的转换。
第03期-用MVC搭建企业级开发框架
介绍零度微框架架构思路,介绍零度微框架中的核心组件,基础结构,依赖注入,服务层,单元测试,使用 Unity 作为容器进行依赖注入,扩展依赖注入方式,写一个 Service 服务并注入到容器中,写一个 Repository 仓储并注入到容器中。
第02期-使用VsCode开发.NetCore网站
C#语言版本、CLR版本、BCL版本和FCL版本,学习 Visual Studio Code 开发工具,VsCode 插件安装方法,在 VsCode 配置 ASP.NET Core 开发环境,介绍 MVC 开发框架的优势。
第01期-.NETCore平台战略
介绍微软 .NET 框架的版本发展,深入研究 .NET 框架的编码模型,CLR 运行时、BCL 基础库和 FCL 框架库,Mono.NET 跨平台介绍,研究 .NET Core 2.0 开发工具, 跨平台原理介绍,.NET Standard 跨平台技术介绍,开发一个简单的 .NET Core 应用程序,元包与包的区别。
第48期-应用服务
应用服务用于实现应用程序的用户用例,用于将领域服务的逻辑公开给表现层,应用服务和数据传输对象,自动生成基于 CRUD 增删改查的应用服务,重写通用应用服务基类方法,定制查询方式,基于复合主键的通用应用服务,过滤器,分页,排序,在应用层处理数据流,验证参数,操作授权,依赖注入生命周期。
第47期-将 ABP 框架升级 .NET 5 版本
关于 ABP 版本概述,将 ABP 升级 .NET 5 版本,升级 ABP 命令行工具,最新 ABP 新版中的新增内容与改进,改进 Blazor 稳定性,使用微软内置的 JSON 序列化库,提供 WPF 项目支持,改进 URL 格式规范,未来版本路线图,每晚构建,使用预览版和稳定版。
第46期-规约模式
规约模式用于定义可重用、可组合、有意义和可测试的过滤器,简单地说,规约模式就是对查询条件表达式用类的形式进行封装,关于 ABP 框架中的规约模块,定义规约,检查对象是否满足某个规约,使用规约查询数据,使用运算符组合规约,使用继承方式组合规约,理解规约的使用场景,阅读分析 ABP 源码,理解规约模块的设计与实现原理。
第45期-领域服务与应用服务
在领域驱动设计中,核心业务逻辑一般在实体和聚合根中实现,但在某些情况下我们需要创建领域服务实现核心业务逻辑,理解领域服务和应用服务的区别,在 ABP 框架中使用领域服务实现业务规则,使用应用服务实现用户交互用例,在应用服务中调用或组合领域服务完成业务处理。
第44期-理解并实现值对象
标识对于实体是必不可少的,系统中有许多对象和数据项不需要标识和标识跟踪,领域模型中的值对象具有无标识和不可变两大特征,在 ABP 框架中实现值对象,在数据库中持久保存值对象,在 EF Core 中以从属实体类型形式来持久保存值对象,阅读并分析 ABP 源码,学习关于值对象的设计与实现原理。
第43期-理解实体与聚合根
理解领域模型驱动设计中的概念,实体,聚合根,值对象,在 ABP 中定义带主键的实体,实体类与实体接口,具有组合键的实体,定义聚合根,聚合根类与聚合根接口,带有组合键的聚合根,实体类与聚合根类的继承层次,实现审计特征相关接口,继承审计通用类可简化审计接口实现,聚合根支持扩展属性,关于实体与聚合根的最佳实践。
第42期-演示数据初始化机制
使用数据库的应用程序都需要一些初始数据,在系统创建时就需要内置超级管理员用户,在开发测试阶段需要模拟一些演示数据,这些数据需要预先存储在数据库中,尽管 EF Core 提供了一种生产数据的方法,但它的能力非常有限,在 ABP 框架种提供了整套数据初始化机制,支持模块化,数据库独立,生产与开发环境分离,支持依赖注入,分析 ABP 源码,理解演示数据初始化机制的设计与实现原理。
第41期-集成内存数据库访问
使用内存数据库模块实现仓储模式,内存数据库对开发和测试来说非常有用,在 ABP 框架中使用内置的内存数据库,创建上下文并配置默认仓储,基于通用抽象仓储扩展自定义仓储,使用自定义仓储替换默认通用仓储,自定义并替换内存数据库仓储基类,阅读 ABP 框架源码,学习内存数据库实现原理与领域层仓储模式。
第40期-集成MongoDB数据访问
学习 NoSQL 与 MongoDB 数据库,在 Docker 容器中运行 MongoDB 数据库, 使用程序访问 MongoDB 数据库,在 ABP 框架中使用 MongoDB 模块实现仓储模式,创建上下文并配置实体映射,关于 MongoDB 连接字符串,基于通用仓储扩展自定义仓储,替换默认仓储实现,工作单元与事务支持,实现并替换默认仓储基类,抽象并提取上下文接口,替换现有的上下文实现。
第39期-集成Dapper数据访问
关于轻量级 ORM 开源库 Dapper 介绍,在 ABP 使用 Dapper 实现仓储模式,基于现有 DbContext 使用 Dapper 模块 和 SQL 语句实现数据库操作,使用 Dapper 扩展库简化 SQL 语句,不依赖 DbContext 实现 Dapper 数据库访问仓储 ,在事务上使用 Dapper 实现操作,阅读 ABP 源码,分析 Dapper 模块实现原理。
第38期-使用MySQL和其它数据库
ABP 框架为一些常见的 DBMS 提供简化的配置集成包,在 Docker 容器中运行数据库服务,安装数据库提供程序集成包,设置模块依赖与数据库提供程序, 配置 SQL Server、MySQL、PostgreSQL、Oracle 和 SQLite 数据库,编写不同类型数据库的连接字符串,多个 DbContext 上下文使用不同类型的数据库,上下文数据库迁移。
第37期-仓储模式与扩展
基于通用仓储实现自定义仓储类,使用自定义仓储实现替换默认通用仓储,配置隐式扩展属性,自定义 EF Core 仓储基类,抽象 DbContext 上下文接口,替换默认仓储上下文实现,在 EF Core 仓储上执行异步操作,关于 MongoDB 仓储实现的异步操作,使用 IAsyncQueryableExecuter 制行异步操作。
第36期-集成EFCore数据访问
关于 ABP 数据访问抽象与 EFCore 数据访问实现,安装相关模块包并添加模块依赖,创建实体和 DbContext 上下文,指定连接字符串名称,实体数据库表映射配置,分离迁移上下文,实现设计时上下文迁移工厂,将上下文注册到容器,迁移多个上下文数据库,配置通用仓储,使用仓储生成演示数据,在服务中使用泛型仓储实现 CRUD 增删改查相关操作。
第35期-分库分表与连接字符串
支持多数据库访问提供程序,灵活的多租户模块化微服务,通过示例学习可扩展的数据库分库分表部署方案,不同模块使用独立数据库,不同的租户使用独立数据库,多个模块共享数据库,多个租户共享数据库,不同租户的不同模块分离数据库,使用特性标记连接字符串名称,配置各种连接字符串,分析 ABP 源码,学习基于多租户的连接字符串解析器。
第34期-多租户管理与用户界面
使用租户管理扩模块在数据库中存储租户配置,租户数据表结构配置,租户数据库架构迁移,迁移租户演示数据,配置租户管理权限,使用可视化 UI 界面管理租户,租户连接字符串管理,主机级别的功能特征管理,基于租户的功能特征管理,分析 APB 租户管理模块项目源码,学习租户管理系统实现原理。
第33期-多租户存储与源码解析
租户存储器用于从数据源获取租户配置,使用默认租户存储器选项配置租户信息,使用配置文件配置租户信息,分析 ABP 源代码,理解多租户机制架构设计,使用租户中间件拦截请求,使用多个租户解析器从请求中解析租户,当前租户设置与获取接口,租户数据过滤器的内部实现原理。
第32期-多租户模块实现
多重租赁技术是一种软件架构技术,用于创建基于云构建的 SaaS 应用程序,关于 ABP 中的多租户模块包,多租户相关设置,数据库架构,多租户数据隔离方案,多租户共享数据库,多租户独享数据库,多租户混合数据库,理解用户的主机级别与租户级别,获取当前访客的租户信息,切换当前租户,禁用多租户数据过滤器,内置的多个租户解析器,基于二级子域名的租户解析器,自定义租户解析器。
第31期-功能管理扩展与用户界面
在数据库中存储功能特征值,安装功能特征管理相关模块包,使用 EF Core 存储功能特征值,配置数据表结构,迁移数据库架构,设置功能特征管理权限,使用 UI 界面管理功能特征值,基于 API 接口管理功能特征值,分析功能特征管理模块源码的实现,深入理解工作机制和实现原理。
第30期-功能特征模块
功能特征管理可在运行时启用禁用更改应用程序的功能行为,安装功能特征模块包,定义功能特征相关配置,子功能特征,更改已有模块的定义值,使用 [RequiresFeature] 和 IFeatureChecker 接口检查功能特征,在客户端检查功能特征,租户值提供者,版本值提供者,默认值提供者,自定义值提供者,使用自定义值存储器,分析 ABP 源码,理解功能特征模块实现原理。
第29期-设置管理与实现原理
使用 EF Core 和 MongoDB 在数据库中存储设置信息,安装设置管理相关模块,使用 EF Core 存储设置数据,配置表结构,迁移数据库表,理解设置视图组件提供者,设置页面导航菜单分组与权限控制,分析 ABP 源码,深入理解设置系统的工作机制和实现原理。
第28期-系统设置配置
理解 ABP 设置模块与配置系统,使用提供者模式定义系统设置,在提供者中更改现有的设置定义,使用设置提供者获取设置值,在客户端读取设置值,实现设置值提供程序,默认值提供程序,配置文件提供程序,全局值提供程序,租户值提供程序,用户值提供程序,设置存储接口,配置加密解密服务,解析设置模块实现原理。
第27期-审计日志高级配置与实现原理
使用贡献者模式为审计日志动态追加内容,获取当前审计日志范围,手动创建审计日志范围,使用审计日志存储扩展模块,将审计日志保存到数据库表中,审计日志数据表的配置与迁移,阅读并理解 ABP 源码,学习基于拦截器的审计日志实现原理与处理机制,学习审计日志存储扩展模块源码,理解使用 EF Core 和 MongoDB 在数据库中存储审计日志的实现原理。
第26期-审计日志基本配置
审计日志与系统日志的区别,基于 ABP 快速构建增删改查演示服务,安装审计日志模块包,在管道中插入审计中间件,审计日志配置选项,保存实体属性变更日志,启用和禁用服务操作审计日志,启用和禁用实体变更审计日志,审计日志的保存机制,理解审计日志对象结构图。
第25期-日志记录与扩展
ABP 框架没有实现任何日志基础设施,沿用 ASP.NET Core 日志系统,推荐使用 Serilog 记录系统日志,日志记录相关配置,在控制台和文件中记录日志,基于 HTTP 请求的日志记录,日志输出模板设置,使用 ABP 中提供的 Serilog 扩展模块,将租户信息、用户信息、客户端信息和请求跟踪编号动态追加到日志条目中。
第24期-集成UI界面与权限管理
集成 ABP 用户界面模块,客户端包管理,前端自动化构建,编写启动页面,前端库的捆绑与压缩,使用 TagHelper 标签,在启动页面上集成权限管理系统的界面,使用界面分配权限和撤回权限,权限管理系统的本地化与多语言实现,分析 ABP 源码,学习权限管理系统界面的设计原理。
第23期-权限管理系统
权限名称常量化与静态嵌套类,权限提供者,权限主键,权限策略名称,安装权限管理模块,权限管理提供者策略配置,配置 DbContext 上下文和数据库迁移程序,生成权限演示数据,使用代码管理权限,使用 API 接口远程管理权限,实现权限管理提供者,分析 ABP 权限管理系统架构源码,理解权限管理系统内部处理机制与最佳实践。
第22期-分析ABP授权机制原理
使用授权服务检查权限,在前端 JavaScript 中判断权限,在开发和测试阶段绕过授权服务,模拟当前用户标识和声明信息,分析 ABP 源码理解授权模块工作机制,授权拦截器,授权方法调用,授权服务,授权策略提供者,授权处理器,授权计算器,权限定义管理者,权限检查器,权限值提供者管理器。
第21期-基于权限策略的授权机制
认证与授权机制的区别,基于数据注解的权限策略,基于用户角色和客户端的多维度授权方式,在权限定义提供者中定义权限,权限的层级结构,实现权限名称本地化,权限与多租户,禁用权限,扩展权限值提供者,自定义权限存储机制,实战演练并理解身份认证与权限系统的处理流程。
第20期-分布式缓存模块
安装 ABP 分布式缓存模块包,使用微软 .NET Core 内置分布式缓存接口,使用 ABP 中的泛型分布式缓存接口,缓存项序列化,缓存键前缀约定,基于多租户的缓存项隔离与共享,全局缓存配置选项,使用 Redis 分布式缓存服务,安装 Redis 扩展模块,配置连接字符串,访问分布式缓存,分析 ABP 源码中关于分布式缓存的机制的实现方式。
第19期-使用FluentValidation验证
数据注解验证的优缺点,在 ABP 中使用 FluentValidation 模块实现链式验证器,安装模块包,创建对象验证器,编写链式验证规则,使用 ABP 内置验证过滤器对模型进行验证,学习 ABP 框架源码,理解验证拦截器,拦截验证方法,对象验证器,对象验证提供者,数据注解与链式验证提供者内部实现原理。
第18期-验证机制
关于 ABP 的验证模型机制,实现 IValidationEnabled 接口对服务方法进行自动验证,验证错误信息的本地化,基于数据注解验证 DTO 数据传输对象,实现 IValidatableObject 接口,使用 IObjectValidator 验证对象,实现自定义对象验证提供者,动态注解特性扩展,通过分析 ABP 源码理解验证机制的实现原理。
第17期-异常处理机制
理解 ABP 异常的处理模型,自动异常封装处理机制,错误消息格式,错误代码,错误详细信息,验证错误,异常级别与日志记录,自定义异常日志记录逻辑,业务异常封装,异常消息本地化与多语言,封送用户友好的错误提示消息,自定义异常与 HTTP 状态码映射关系,分析 ABP 源码,理解异常处理过滤器,内置轻量级异常发布订阅机制。
第16期-本地化与多语言
多语言网站可以覆盖更广泛的受众,使用 ABP 提供的本地化模块,借助微软中间件可将网站本地化为不同国家的语言和文化,安装本地化模块包,创建多语言资源包,简化资源名称,继承其它资源,扩展现有资源,设置默认资源,在类中使用本地化资源文件,格式化参数,在 Razor 视图中使用本地化资源文件,在前端使用本地化资源文件。
第15期-虚拟文件系统
理解 ABP 中的虚拟文件系统,安装虚拟文件模块库,将指定的文件嵌入到程序集,使用 glob 通配符嵌入文件,使用反汇编工具查看嵌入在程序集中的文件,将嵌入在程序集中的文件注册到虚拟文件系统,使用 ABP 虚拟文件系统,将虚拟文件系统与 ASP.NET Core 集成,使用 HTTP 协议访问虚拟文件系统中的静态资源,学习 ABP 源码,理解虚拟文件系统模块的实现原理。
第14期-关于Autofac与AOP拦截器
Autofac 是 .NET Core 平台上最常用的依赖注入框架,相比 .NET Core 标准的依赖注入库,它提供更加高级的特性,动态代理,属性注入,拦截器,基于配置文件的依赖项,安装 Autofac 模块,配置模块依赖,替换依赖注入容器,关于横切关注点与拦截器,动态 AOP 与静态 AOP 的区别与实现,实战演练编写自己的动态拦截器,学习 ABP 源码,理解验证拦截器,授权拦截器,工作单元拦截器,审计日志拦截器。
第13期-依赖注入相关配置
关于 ABP 中的依赖注入系统,在不同的模块中向容器添加依赖项,约定大于配置的原则,依赖注入默认约定,依赖项的生命周期,禁用默认约定,手动注册相关服务,依赖注入接口约定,依赖注入 Attribute 特性约定,多种注入方式混合使用,构造函数注入,属性注入,使用解析服务注入,依赖注册通知,分析 ABP 源码,学习依赖注入约定的实现。
第12期-配置与选项
ABP 框架中的配置系统与 ASP.NET Core 完全兼容,基于键值存储的配置系统,从配置文件中读取配置信息,关于选项配置模式,自定义配置选项,在容器中注入配置,从容器中解析配置,ABP 框架提供的预配置机制允许在容器初始化之前配置选项模式,在当前模块容器配置过程中解析其它模块提供的预配置选项。
第11期-扩展实体对象的属性
扩展属性是用于存储实体额外数据但不用更改实体的一种扩展方式,创建或删除实体的扩展属性,设置实体的隐藏扩展属性,将多个实体类型映射到相同的数据库表并实现数据表共享,创建数据库同步共享表,追踪实体对象变更,在单体应用中订阅领域事件通知,基于分布式微服务的事件总线订阅,分析 ABP 模块源码,理解扩展属性的实现方式和事件总线机制。
第10期-自定义现有模块与包引用
ABP 框架的设计旨在使用可复用的模块构建应用程序系统,复用模块提供包引用和源码包含两种方式,前者整洁干净,升级简单,只包含自己的代码,后者提供源码级别的灵活修改,可分离模块解决方案,使用 ABP 提供的自动化构建脚本编译项目,搭建私有的 NuGet 包仓库服务器,使用 ABP 提供的脚本打包项目,将完成的打包自动发布到私有仓库,在解决方案中安装来自私有仓库的包。
第09期-使用Angular实战增删改查
创建 Angular 项目基架,定义领域实体,将实体添加到 DbContext 上下文,配置实体,数据库变更迁移,实现演示数据生成接口,多语言资源包,定义 DTO 数据传输对象,领域实体与 DTO自动映射配置 ,编写并实现应用程序服务接口,修改 Angular 请求地址,实现权限定义提供者接口,定义系统操作权限,基于角色的授权机制,使用 NPM 命令还原前端模块包,编译并运行 Angular 单页应用。
第08期-编写单元测试与集成测试
理解 ABP 中的测试体系结构,使用 xUnit 框架驱动测试,使用 Shouldly 链式断言库,基于 Mock 的 NSubstitute 开源模拟库,实战演练,实现演示数据生成器,编写单元测试和集成测试,基于 Substitute 类模拟接口实现,基于 TestServer 在内存进程级别进行 UI 界面测试,使用 AngleSharp 开源库解析网页 DOM 结构。
第07期-使用ABP实战CRUD增删改查
示例代码与依赖包还原,在 ABP 中使用 NPM 包管理器还原前端包,使用 Gulp 任务进行前端自动化构建,实战演练本地化与多国语言切换,定制菜单项,实现异步列表展示,排序与分页,创建功能,编辑功能,删除功能,前后端自动验证,实现品牌提供接口定制个性化站点内容。
第06期-使用ABP实战演练应用开发
使用命令行创建基架,在领域层添加实体和聚合根,在领域共享层添加枚举,将实体添加到 DbContext 上下文,配置实体的属性字段映射,添加新的迁移脚本并同步数据库,创建 DTO 对象并配置映射关系,创建应用层服务接口与实现,运行 OpenApi 帮助文档,使用动态生成的客户端代理脚本请求 API 接口,使用 C# 客户端代理调用 API 接口。
第05期-使用CLI命令创建微服务架构
细说 ABP 命令行工具,理解项目模板,指定 UI 框架,移动端开发支持,选择数据库提供程序,分离 Web 项目和 API 项目,单独发布 IdentityServer 服务,模块分层与单体部署,将模块部署到不同的主机管道,容器化 ABP 模块并实现微服务架构,构建运行 Angular 单页项目,构建运行 React Native 移动应用,使用官方向导工具创建分层架构。
第04期-使用CLI命令行创建分层架构
安装并更新 ABP 提供的 CLI 命令行工具,关于 ABP 命令与参数,使用 DDD 分层架构模板创建项目,指定模板,指定 UI 框架,选择数据库提供程序,将 API 接口与 IdentityServer 服务分离部署,多个项目模块共享请求管道,细说 DDD 项目分层结构,单元测试与集成测试项目结构说明,使用迁移工具创建数据库,启动并运行基架项目。
第03期-使用MVC模块开发Web应用
创建 ASP.NET Core 空项目,使用最少的依赖项构建请求管道,安装 ABP 框架提供的 MVC 模块包,用多个 ABP 模块构建不同的站点,在模块中配置依赖注入容器和请求中间件,在 Startup 启动类中配置 ABP 应用程序引擎,初始化 ABP 应用程序环境,使用 MVC 控制器处理请求,配置模块依赖关系,分析 ABP 源码,理解内部请求处理机制。
第02期-理解模块加载机制
使用最少的依赖关系创建新项目并安装 ABP 核心包,创建首个 ABP 模块,初始化 ABP 应用程序引擎,加载启动模块,编写 HelloWorld 服务,使用依赖容器注入服务,基于约定的依赖注入方式,分析 ABP 源码,理解模块接口与基类层次,模块的声明周期,应用程序工厂与模块容器,模块管理器与加载器,程序集探测器与模块类型查询器。
第01期-什么是ABP框架
关于 ASP.NET Boilerplate 与 ASP.NET Zero 的区别,全新的 ABP Framework 框架专注于 ASP.NET Core 平台应用程序开发,支持分布式微服务,提供 CLI 命令行,模块化,多租户,标签助手,认证与授权,横切关注点,捆绑与缩小,虚拟文件系统,多主题,后台任务,基于 DDD 设计,自动生成 API 接口,动态客户端代理,分布式事件总线,测试集成,审计日志,对象映射,电子邮件短信发送,多语言,面向方面的编程,约定式依赖注入。
第09期-输入与输出绑定构建块
通过 Dapr 资源绑定,可以自动处理来自外部系统的事件或与外部系统的接口快速集成,理解输入绑定与输出绑定,支持的绑定组件列表,使用 SMTP 输出绑定发送邮件,使用 Cron 输入绑定实现灵活的定时自动任务,关于 Cron 表达式配置自动任务,使用绑定组件执行 SQL 语句,关于钉钉消息收发集成。
第08期-发布和订阅构建块
分布式消息队列和事件总线,在 Dapr 中使用发布与订阅,基于 CloudEvents 规范的通用格式事件数据,消费者群体的竞争性模式,事件消息的生存时间,发布订阅组件列表,配置发布订阅组件,使用命令行发布订阅主题,实战演练在 .NET 平台上使用 SDK 发布主题,使用申明方式订阅主题,编程方式订阅主题,在 ASP .NET Core 中使用 SDK 订阅主题。
第07期-状态管理构建块
应用程序可以基于 Dapr 状态管理 API 使用状态存储组件保存和读取键值对,关于 Redis 状态存储组件的配置,在 .NET 平台上使用 SDK 管理状态存储,在 ASP.NET Core 依赖注入容器中集成 Dapr 客户端,将存储状态绑定到模型,状态存储 API 参考文档。
第06期-使用Grpc编写Dapr服务
定义并引用通信服务,实战演练示例,学习 Protobuf 语法规则,创建 Grpc 服务端,实现服务端业务逻辑,在 Dapr 中运行服务端,实现客户端调用服务,在 Dapr 中运行客户端,理解 Dapr 中的服务调用通信流程和相关协议,服务发现和名称解析。
第05期-使用中间件限制请求速率
Dapr 允许通过链接一系列中间件组件来定义自定义处理管道,请求在路由到用户代码之前经过所有已定义的中间件组件,然后在返回到客户机之前,按相反顺序经过已定义的中间件,学习中间件配置方法和流程,通过 API 请求速率限制中间件阻止恶意攻击,身份认证和授权中间件。
第04期-服务调用构建块
基于 Dapr 的分布式应用服务调用流程,学习 HTTP 接口,通过示例代码演示服务调用,使用命令行测试 Dapr 服务接口,使用 HttpClient 提供的扩展方法调用 Dapr 服务接口,使用 .NET SDK 调用 Dapr 服务接口,使用 DaprClient 通过 Grpc 协议调用服务,如何优雅停止 Dapr 应用和进程。
第03期-定义一个 Dapr 组件
不用容器初始化 Dapr 运行时,组件默认目录,定义密钥存储组件,创建密钥文件,使用 Dapr 命令运行 Sidecar 应用,使用 Dapr 提供的 HTTP 接口访问并获取密钥,密钥存储 API 参考,使用基于 Dapr 的 .NET SDK 开发包,云计算厂商提供的密钥管理服务。
第02期-安装 Dapr 与快速入门
安装 Dapr 环境,初始化 Dapr 运行时,运行 Dapr Sidecar 实例,离线安装,卸载删除 Dapr 运行时,宿主方式与自宿主,理解 Dapr 架构和 Docker 容器,通过一个简单的示例调用 Dapr 提供的分布式缓存存取接口。
第01期-Dapr简介与入门
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架,构建块与组件的区别,基于 Sidecar 架构,组件与实现,中间件管道,可观测性,传输安全性。
第34期-微服务体系架构技术总结
" 容器化应用管理,关系型与非关系型数据库,分布式消息队列,分布式缓存,服务网关实现,反向代理与负载均衡,分布式结构化日志系统,服务注册与发现,健康状况监测,依赖注入容器,轻量级数据访问框架,链式验证规则,实体属性自动映射,远程过程调用,实现单点登录,使用中介者模式的领域事件,客户端实时通信与通知,容错故障处理,日志收集器,帮助文档生成工具,网络钩子,实现后台自动任务,自动化测试,前端库管理与性能优化。 "
第33期-分布式结构化日志系统
分布式与结构化日志系统,可用 Serilog 与 NLog 收集日志 ,学习微软 eShop 微服务体系结构中的 Seq 分布结构化日志系统,收集应用程序日志,强大的搜索与过滤机制,分析并绘制日志图表,警报与通知,工具链 ELK 由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成,使用 ELK 搭建大规模分布式实时日志分析平台,使用 RequestID 在分布式系统中追踪请求。
第32期-Webhook网络钩子发送通知
不同微服务间的通信方式,相同微服务不同领域聚合之间的通信方式,使用 Webhooks 网络钩子向外部系统发送事件通知,学习微软 eShop 微服务体系架构中关于 Webhook 网络钩子的实现,实现钩子查询和注册退订接口,使用可视化客户端界面管理钩子,钩子操作的认证与授权机制。
第31期-微服务身份认证与授权机制
微服务的安全性,理解身份认证与授权过程,实现单点登录,使用 Identity 进行身份验证,使用外部提供程序进行身份验证,使用持有者令牌进行身份验证,使用 OpenID Connect 或 OAuth 2.0 标识提供程序进行身份验证,使用 IdentityServer 服务颁发安全令牌,跨多个微服务传递访问令牌,关于 JwtBearer 与 Cookie 认证,基于角色的授权和基于策略的授权,在开发过程中安全地存储应用程序机密。
第30期-微服务使用NoSQL数据库
理解关系型数据库与 NoSQL 非关系型数据库,列式数据存储与键值数据存储的区别,学习 MongoDB 数据库,在 Docker 容器中运行 MongoDB 数据库,使用图形化界面管理 MongoDB 数据库,在 ASP.NET Core 中使用开源驱动程序对 MongoDB 数据库实现 CRUD 操作,微软 eShop 微服务架构中应用 MongoDB 存储用户的 GPS 地理位置信息。
第29期-实现CQRS模式与DDD应用层
在 CQRS 微服务中实现读写分离,理解领域实体与视图模型的区别,使用 Dapper 作为微型 ORM 以执行查询,实现领域事件处理程序,基于 Autofac 扩展依赖注入容器,使用 MediatR 实现命令与命令处理程序模式,使用中介者管道拦截器对命令执行 FluentValidation 链式验证,命令日志记录拦截器,实现可扩展的命令去重功能。
第28期-实现DDD领域层与基础设施层
学习 eShop 微服务架构源码,学习面向 DDD 微服务的分层架构,实现领域模型层,编写聚合根、领域实体、值对象和领域事件,适用于领域模型的可重用基类与接口,使用枚举类不是枚举类型,仓储模式与工作单元接口,使用 EfCore 实现基础结构持久层,请求消息去重机制。
第27期-设计微服务CQRS与DDD模式
在微服务中应用简化后的 CQRS 和 DDD 模式,事件溯与 CQRS 模式,设计面向 DDD 的微服务,设计微服务领域模型,聚合跟、领域实体和值对象,贫血模型与充血模型,模型验证,领域事件的设计和实现,领域事件与集成事件的区别,设计基础结构持久性层,仓储模式与工作单元,使用 EfCore 和 NoSQL 实现基础设施层,设计微服务应用层和 Web API 接口,实现命令和命令处理程序模式。
第26期-测试微服务应用程序
基于微服务的单元测试、集成测试和功能测试,学习微软 eShop 微服务体系结构中的测试方式,单元测试与 Mock 虚拟对象,为提高集成测试与功能测试的执行效率,可使用 TestHost 在进程内模拟测试服务器,测试微服务之间的交互协作,使用多环境配置文件,在 Docker 容器中运行测试项目。
第25期-设计和开发多容器微服务
多体系微服务结构模式,设计面向微服务的 .NET Core 应用程序,创建简单的数据驱动 CRUD 微服务,学习微软 eShop 微服务体系结构源码,定义多容器应用程序,容器环境变量,在容器中运行数据库,数据库迁移与演示数据生成,使用内存数据库提升开发环境性能,在容器中运行的 Redis 分布式缓存服务,在微服务中实现后台自动任务。
第24期-可复原性与瞬态故障处理机制
微服务的复原模式与容错性,瞬态故障处理设计,重试机制,指数退避算法与抖动策略,超时机制,缓存策略,断路器模式,回退机制,限制请求数,限流限次与计费机制,使用 Polly 开源库处理瞬态故障,编写处理条件,设置策略,使用策略执行方法,可将策略注入到依赖容器,将 HttpClientFactory 与 Polly 集成,学习微软 eShop 微服务体系架构中的瞬态故障处理方式,关于管道中间件实现断路器模拟测试方案。
第23期-可复原的EFCore数据库访问
实现可复原的微服务,瞬时故障与容错性,微软 EF Core 提供程序针对特定数据库的失败条件提供定制的执行策略,同时提供最佳的重试策略,配置重试次数、重试间隔和错误代码,数据库连接字符串中的重试参数,自定义执行策略,执行策略与事务,事务提交失败和幂等性问题,学习 eShop 微服务体系架构中重试机制与事务执行策略的应用。
第22期-微服务运行状况管理和诊断
运行状况监视可获取有关容器和微服务状态的近实时信息,容器业务流程协调程序和负载均衡器用于检查应用的状态,运行状况检查由应用程序作为 HTTP 终结点公开,微软 ASP.NET Core 提供运行状况检查解决方案,配置运行状况检查,编写自定义健康检查器,使用开源扩展库实现运行状况检查,可视化展示与历史状况时间线,可用 Webhook 网络钩子通知其它服务,微软 eShop 微服务体系架构中的健康状况检查。
第21期-创建基于微服务的UI微前端
微服务体系结构通常从服务器端开始处理数据和逻辑,许多情况下 UI 仍作为整体来处理,对于复杂的业务规模,整体式 UI 难以维护,一种称为微前端方法可生成复合 UI 界面,按照这种方法构建的微服务具有自治的逻辑和可视化表示形式,功能十分完整,与之相比,复合 UI 是由微服务本身精确生成和组合而成的,可灵活控制 UI 特定区域的视觉形状。
第20期-微服务的注册与发现
每个微服务都有唯一名称,用于解析其位置,了解 DNS 解析系统,理解微服务的可寻址性,服务注册表与服务发现,主流的服务注册解决方案,使用开源 Consul 工具搭建服务注册与发现集群,健康检查,负载均衡,全局分布式的键值存储,实战演练,基于 ASP.NET Core 构建微服务,在注册表集群中动态注册服务,使用服务发现动态调用微服务,关于 Consul 与 Ocelot、Nginx、Envoy 和 Kubernetes 的深度集成。
第19期-事件总线的原子性和复原能力
使用完整事件溯源模式,事务日志挖掘,使用发件箱模式关联数据库事务,记录事件日志,将事件发布到总线的原子性,使用辅助微服务将事件发布到总线的复原能力,更新事件消息的幂等性,代码实战演练,使用 EF Core 实现通用的发件箱模式,微软 eShop 微服务架构中关于事件总线的应用。
第18期-抽象并实现可扩展的事件总线
学习微软 eShop 微服务架构中的事件总线,实现可扩展的事件总线,消息事件定义,事件总线接口抽象,事件处理程序抽象,基于动态类型的处理程序,事件与订阅者管理器,使用 RabbitMQ 完成事件总线接口,使用指数退避算法实现连接复原,依赖注入扩展与配置选项,通过示例代码实战演练,生产者与消费者处理器的依赖注入。
第17期-使用RabbitMQ图形化管理
认识 RabbitMQ 提供的命令行工具,学习图形化管理界面,分别配置虚机、连接、通道、交换机、队列、用户和权限,使用图形界面跟踪性能并调试队列,配置队列读写权限,生产者与消费者的身份认证授权,关于 RabbitMQ 高可用性与分布式集群的搭建,使用 Docker 容器编排文件快速启动分布式集群,其它扩展功能介绍。
第16期-使用RabbitMQ更高级的功能
生产者将消息发布到 Direct 类型的交换机,消费者通过路由键将队列绑定到交换机消费消息,生产者将消息发布到 Topic 类型的交换机,消费者使用路由键通配符订阅消息,使用回复队列间接实现基于 RPC 的请求模式,使用 ACK 确认机制保证生产者与消费者传输消息的可靠性,示例代码与实战演练。
第15期-使用RabbitMQ实现事件总线
关于 AMQP 通信协议与 RabbitMQ 的基本架构,生产者,消费者,交换机,队列,路由键,虚拟机,使用多个通道复用物理连接,安装方式说明,在 Docker 容器中运行 RabbitMQ 服务端,通过编写代码实战演练,最简单的队列通信方式,将生产者消息分配给多个工作进程,分布式队列的发布订阅模式,定义队列与交换机,并将队列绑定到交换机,消息到达后的自动确认与手动确认。
第14期-分布式消息队列总线异步通信
同步与异步通信,关于 AMQP 高级消息队列协议,基于异步通信的单接收者与多接收者,事件驱动的异步通信,观察者模式,发布者与订阅者模式,抽象可扩展的事件总线接口,事件总线接口的多个实现,发布事件的原子性和复原能力,使用事件溯源模式和发件箱模式实现数据的高可用性与一致性。
第13期-学习Kubernetes集群体系架构
认识 K8S 容器集群管理解决方案,理解 Docker 物理架构层次图和体系结构图,关于 Kubernetes 体系架构图,微软 eShop 微服务体系架构中的 K8S 集群部署,如何学习 Docker 和 Kubernetes 技术,使用可视化的界面管理集群,微软 Visual Studio 提供的 Kubernetes 工具可简化面向容器化应用程序的开发。
第12期-容器化Docker应用程序开发流程
常用 Docker 命令集合,学习微软平台上开发 Docker 应用程序的流程,构建 Docker 容器开发环境,安装 Visual Studio 容器工具工作负载,在项目中启用 Docker 支持,生成镜像,使用发布工具发布映像到远程仓库注册表,使用容器业务流程协调程序支持管理多个容器,多环境配置文件管理,在项目中读取配置文件,关于容器工具的相关设置。
第11期-分布式微服务的挑战和解决方案
如何定义每个微服务的边界,创建从多个微服务中检索数据的查询,可用 API 网关聚合数据,关于 CQRS 命令查询职责分离,具体化视图模式,如何实现微服务之间的数据一致性,分布式系统设计中的 CAP 原则与 BASE 原则,同步通信与异步通信,如何设计跨微服务边界的通信。基于分布式消息队列的异步通信,在事件总线上发布与订阅,事件溯源模式。
第10期-Envoy在eShop微服务中的应用
开源 Envoy 是专为代理和通信总线而设计的,关于官方文档与指南,通过编写 ASP.NET Core 示例演示 Envoy 的使用方法,镜像生成与容器编排,在 Docker 容器中运行 Envoy 代理,使用 Dcoker 容器卷映射配置文件,路由规则设置,负载均衡集群和算法策略配置,学会 Visual Studio 提供 Docker 镜像与容器可视化管理工具,微软 eShop 微服务体系架构中的 Envoy 应用,网关模式与 BFF 代理设计。
第09期-Ocelot在eShop微服务中的应用
学习微软 eShop 微服务体系架构中的网关设计思想,使用单个 Docker 容器映像通过不同的配置运行多个不同类型的 API 网关或 BFF 容器,微服务架构中的网关聚合模式,在网关层面使用 IdentityServer 实现的身份认证与授权横切点,通过分析项目源代码,深入理解微服务中的网关设计和具体实现。
第08期-使用Ocelot网关转发请求
学习 Ocelot 开源网关,理解功能特点,配置,路由规则,请求聚合,服务发现,认证授权,限次限速,谓词转换,缓存,服务质量,请求头转换,用户声明转换,分布式日志追踪,通过示例演示请求转发功能,配置负载均衡服务列表与均衡算法策略,使用 API 聚合器合并多个返回结果,编写自定义的请求聚合器。
第07期-Nginx从入门到实践
正向代理与反向代理,负载均衡,动静分离,高可用性与容错能力,守候进程与工作进程,无需重新启动的热部署,将 Nginx 寄宿到 Windows 服务中,解读强大详细的配置文件,通过示例实战演练,负载均衡策略,默认轮询,加权轮询,最少连接原则,加权最少连接,IP哈希算法,Url哈希算法,关于开源的 Nginx 可视化管理工具,可在 Docker 容器 中运行 Nginx 支持,推荐优质的学习资源。
第06期-微服务API网关模式与BFF模式
客户端与微服务终结点直接通信,对于大型复杂应用程序,面临很多问题,可使用客户端到 API 网关的通信模式,实现 BFF 面向前端的后端模式,网关模式的主要功能,反向代理或网关路由,请求聚合,使用第三方框架实现网关功能,分析网关模式的缺点,学习 eShopOnContainers 项目中关于 API 网关模式与 BFF 模式的应用。
第05期-如何定义微服务的模型边界
在为每个微服务定义模型边界和大小时,应尽可能倾向于小型微服务,但目标并不是尽可能达到最细粒度的分离,根据领域驱动 DDD 限定上下文分析模型的边界,康威定律规定应用程序应反映开发团队的组织结构,若要定义有界上下文,可以使用 DDD 上下文映射模式,关于 eShopOnContainers 项目中的微服务定义。
第04期-基于微服务的容器化应用程序
理解 Docker 容器、映像和注册表,容器的设计原则,容器化单体式应用程序,容器化应用程序中的状态和数据共享,容器化面向 SOA 服务的体系结构,微服务体系结构指南,微服务与 DDD 界定上下文模式之间的关系,逻辑体系结构与物理体系结构。
第03期-使用VisualStudio运行项目源码
配置 Visual Studio 开发环境,运行 eShopOnContainers 项目源码,快速生成 Docker 映像,将映像推到容器中运行,使用可视化管理工具查看映像与容器,探索微服务接口和 Web 应用程序,运行基于 Xamarin 开发的 iOS、Android 和 UWP 移动应用,分别使用模拟器和真机运行移动应用。
第02期-使用CLI命令行运行项目源码
微服务体系结构与容器化应用程序,虚拟机与容器,系统需求,硬件要求与软件要求,配置 Docker 容器主机,使用脚本配置网络防火墙,克隆项目到本地,项目结构目录说明,构建并生成应用程序映像,将微服务映像推到容器中运行,探索应用程序中提供的各种微服务。
第01期-项目总体概况
在微服务架构非常流行的今天,微软也提供了一个基于 .NET Core 平台的微服务架构参考示例,微软 eShopOnContainers 项目架构基于 .NET Core 平台和 Docker 容器,提供一个简化版的在线商城项目,该项目中所使用了很多技术点,可供参考学习,微服务架构图,客户端应用与服务端应用,微服务架构模式,适用于容器化的 .NET 应用程序的体系结构。
第13期-常用的Web前端技术选型
ASP.NET Core 应用程序属于 Web 应用程序,在开发中通常依赖于 HTML、CSS 和 JavaScript 等客户端技术,使用 Bootstrap 库使前端开发更加简单高效,学会 SASS 和 LESS 预处理器,比较 jQuery、Angular、Vue 和 React 前端库,了解 ECMAScript 6 规范标准,如何系统学习前端技术。
第12期-数据访问技术方案选型
对于几乎任何软件应用程序,数据访问都是重要的部分,微软 ASP.NET Core 支持各种数据访问技术,理解关系型数据库与非关系型数据库,学习结构化、半结构化和非结构化数据,使用 EF Core 访问关系型数据库,设置弹性连接,连接重试中的指数退避算法,关于 EF Core 和微型 ORM 框架的选择,对比 Dapper 与 EF Core 性能,关于 SQL 与 NoSQL 对比,可用第三方云计算数据存储方案。
第11期-单元测试&集成测试&功能测试
任何复杂程度的软件在响应更改方面皆可能意外失败,编写的应用程序应具备可测试性,基于单元测试、集成测试和功能测试实现自动化测试方案,测试金字塔理念,分析要测试的内容,在解决方案中组织测试项目,微软测试类和方法的命名规则,分析 eShopOnWeb 中的测试项目,回归测试与调试测试,功能测试可在进程内使用 HttpClient 与 TestServer 建立高性能的通信信道。
第10期-分析eShopOnWeb相关技术
学习微软 eShopOnWeb 中所使用的前端库管理与自动化构建工具,查看 ASP.NET Core 依赖注入容器中注册的所有服务,视图组件与部分视图,在路由中使用参数转换程序自定义标记替换,自定义路由约定,架构中的改进与扩展。
第09期-使用MediatR实现中介者发布订阅
中介者模式可避免交互对象之间的紧耦合关系,发布与订阅形式,使用 MediatR 中介者实现发布与订阅,单播与多播消息,有返回值的单播消息,无返回值的单播消息,单播消息处理器,多播通知消息,多播通知处理器,多路广播中的分发策略设置,中介者的同步与异步调用,关于 MediatR 在 eShopOnWeb 项目中的实践应用。
第08期-分析eShopOnWeb应用层与UI层架构
理解领域层、应用层和 UI 层的项目依赖关系,应用层接口与实现,控制器与 WebAPI 设计,使用 Swagger 构建接口文档,使用健康检查组件分析 WebAPI 运行情况,使用 Area 区域组织项目项目结构,领域实体与视图模型转换。
第07期-分析eShopOnWeb基础设施层架构
抽象异步仓储模式,领域驱动中的规约模式与查询条件复用,理解基础设施层,关于持久性无感知的架构理念,可替换的基础设施,封装 DbContext 上下文实现异步仓储接口,通用规约条件计算器,实体类型映射配置,自定义的订单仓储,演示数据初始化,模型迁移,集成 Identity 身份认证设施,实现邮件发送服务。
第06期-分析eShopOnWeb领域层架构
领域驱动项目总体结构,基于洋葱同心圆整洁架构,解析微软项目源码层次结构,分析抽象核心业务模型,聚合、实体与值对象的实现,优雅的异常设计与错误处理技巧,领域服务的接口与实现。
第05期-运行eShopOnWeb源码
在 GitHub 上下载 eShopOnWeb 源码,项目文件结构说明,使用内存数据库在开发环境运行项目,使用 SQL Server 迁移模型并运行项目,小商城功能演示,查看数据库表结构与关系,设置 Docker 容器的仓库地址,下载 .NET Core SDK 容器镜像,在 Docker 容器中运行项目。
第04期-新式应用程序架构指南
新式 Web 应用程序的特征,微软 eShopOnWeb 开源项目介绍,关于 MPA 多页面和 SPA 单页面应用的决策,体系结构架构通用设计原则,分离关注点,封装变化点,依赖倒置原则,显式依赖关系,单一职责原则,对自我重复进行重构,实现持久化无感知,基于 DDD 限定上下文,常用 Web 应用程序体系结构,传统分层架构和现代化整洁架构,领域层、基础设施层和表现层之间的依赖关系。
第03期-单体应用&SOA架构&微服务
理解架构中的高性能、可用性、伸缩性、可扩展性和安全性,使用三维模型拆分业务规模庞大的应用系统,X轴水平拆分、Y轴功能拆分与Z轴数据分割,设计模式、框架、分层和架构的之间的区别与联系,理解单体应用架构、面向服务的 SOA 架构和微服务架构,关于微服务和 SOA 的区别,DDD与微服务,分布式与集群的区别。
第02期-DDD领域驱动设计
学习 DDD 领域驱动设计模型,问题领域分析、限定上下文和通用语言,领域驱动分层架构设计,基础设施层、领域层、应用层和表现层之间的关系,抽象接口的编程思想可降低耦合,关于 DDD 模型的组成部分,理解实体、值对象、应用服务、领域服务、领域事件、聚合根、仓储库、工厂和模块。
第01期-相关基本概念约定
理解程序集、包和元包的区别,库、框架、架构和平台之间的关系,微软 .NET Core 是一种由包组成的平台,有些产品体验受益于包的细粒度定义,而另一些受益于粗粒度的定义,为了适应这种二元定义,一款好的产品应该作为一组细粒度的包发布,并在更粗的粒度组块中进行分发。
第51期-零度框架基于.NET6的重构与升级
更改目标框架为 .NET 6 版本,更新所有包引用,使用最小托管模型,将 Startup 与新的最小托管模型结合使用,升级 IdentityServer 版本,重构项目代码,解决代码错误警告建议, 基于 JavaScript 和 TypeScript 项目的 SDK 模板, 修正可空引用类型,使用源代码生成器记录强类型语义日志,升级 OAuth 外部身份认证提供程序。
第50期-使用微软YARP开源网关负载均衡
学习微软开源 YARP 反向代理服务器,在零度框架微服务中集成网关,路由和负载均衡集群节点配置,支持认证与授权,会话粘性和一致性,负载均衡切换算法,中间件扩展,请求转换,微服务健康状况监测,分布式跟踪,支持 gRPC 请求代理转发。
第49期-前端访问控制列表和操作权限控制
使用前端请求管道传递 JwtBearer 访问令牌,设计并加载用户配置信息和权限访问控制列表,可见性权限控制,细粒度操作按钮权限控制组件,路由与菜单权限控制,基于多租户授权主体生成权限演示数据,重构并修复多租户数据筛选器,重构权限断言相关服务的依赖注入生命周期,重构租户管道中间件执行顺序,实战演练完整的权限系统。
第48期-基于React的前端用户登录与授权
前端客户端 Identity Server 授权配置 ,前端客户端登录与登录回调,前端客户端注销与注销回调,使用 OIDC 前端库实现基于 OAuth2 协议的用户会话和访问令牌管理,编写基于 React 的认证与授权页面,配置路由,未登录时跳转到登录页面,登录后跳转到回调页面,获取用户信息,用户退出跳转,调试 React 应用的方法和技巧。
第47期-实现仓储批操作与导航属性加载
领域层仓储实现批量创建,批量更新,批量删除,批量操作性能优化与相关开源库,使用仓储加载实体的导航属性,预加载和显式加载,基于依赖注入配置导航属性默认加载项,使用部分类和扩展方法分割代码,提高代码的可维护性,常用命名规范说明。
第46期-实现批量删除功能与多选确认
表格批量删除配置,多选与全选操作,弹出批量操作工具条,在工具条上添置自定义组件和布局,字符串插值格式化,学习前端累加器,析构对象参数,异步调用后台接口实现批量删除,使用浮动组件提高批量操作的用户体验,列表页面的用户体验设计价值观。
第45期-实现单行删除功能与删除确认
删除确认设计,基于回收站和操作版本历史记录的设计可以提高用户体验,气泡确认框组件,警告提示组件,全局消息提示组件,对话框组件,通知提示框组件,在操作列上实现删除功能,异步删除,加载中实现,使用前端代理调用后端接口实现删除,在后端模拟耗时操作后测试前端加载功能的体验。
第44期-实现表单编辑绑定和数据提交
前端验证与后端验证,模态弹框表单更改为抽屉式表单,编写自定义组件,在表格操作列上绑定编辑行为,实现抽屉式编辑表单,组件之间传值,使用钩子进行值回传,使用自定义组件,快速绑定表单数据,调用后台接口实现修改功能,关于通用 CRUD 服务中特定字段更新操作的改进与说明。
第43期-表单数据提交与前端数据验证
弹框创建对话框,表单与表单项,模态对话框,抽屉对话框,表单组件,各种各样的浮层表单,分步骤填写的表单,配置表单项数据验证规则,组件的引用与行为调用,提交表单前自动验证,调用后台接口实现创建功能,创建后刷新表格数据,弹出成功提示消息框。
第42期-数据列搜索与列详细信息展示
自动生成表格列搜索,自定义搜索渲染器,根据用户设备分辨率实现动态响应式布局,使用过滤器实现搜索,使用抽屉组件展示列详情,使用描述列表展示详情内容,使用 React 状态钩子存储当前选择的行和抽屉状态,理解组件与状态的绑定关系,使用骨架屏提高用户加载数据的体验。
第41期-实现关键字搜索和多字段排序
设计分页与排序模型,多字段联合排序描述器,在应用服务中使用排序描述器对列表排序,使用字段名称生成排序表达式,实现排序规则模型绑定器和模型绑定提供者,配置排序模型绑定提供者,前端列表传递排序参数,基于通用模型自定义数据查询模型,重写数据过滤器,在前端启用关键字搜索。
第40期-使用表格组件实现前端列表查询
使用过滤器扩展 OpenApi 组件,使用 UMI 工具链基于 OpenApi 文档生成前端接口请求代理,表格组件的基本配置与多语言实现,请求后台 WebApi 接口绑定数据,数据表分页,使用代理服务解决跨域问题和接口数据模拟,完全实现前后端分离开发模式。
第39期-配置项目基架并编写React组件
" 默认登录逻辑的实现,站点布局主题配置,修改站点信息和模板页,推荐 SVG 格式的矢量 LOGO 图标,设置页头和页脚内容,实现中英文多语言内容切换,编写页面组件,将页面组件关联到路由菜单,配置路由菜单支持多语言,分割多语言资源文件。"
第38期-使用UMI实现前端自动化基架
初始化前端项目,将前端框架集成到零度解决方案,前端项目版本控制,使用 Visual Studio Code 开发前端 React 项目并实现自动化编译和运行,启动项目,前端项目文件夹结构,页面代码结构解析,使用 UMI 插件基于 OpenApi 帮助文档自动化生成前端代码,生成接口前端模拟数据,将前端项目打包发布到生产平台。
第37期-使用UMI搭建前端ANTD基架
关于 NODE.JS 环境安装,学会 NPM 和 YARN 包管理器,使用 UMI 工具初始化前端脚手架,快速创建 ANT DESIGN PRO 脚手架,使用包管理器安装依赖项,编译并启动前端应用程序,开启 UMI UI 工具,使用 UMI 提供的模板快速开发前端通用界面和功能,所见即所得的快速增量编译和浏览器自动刷新,使用 Visual Studio Code 开发前端 React 项目并实现自动化编译和运行。
第36期-搭建基于React的前端框架
" 零度框架前端技术栈,React 是用于构建前端用户界面的 JavaScript 库,声明式,组件化,一次学习,跨平台编写,学习基于 Ant Design 设计体系和价值观,Antd 是一整套基于 React UI 的组件库,主要用于快速开发企业级中后台应用,Ant Design Pro 提供开箱即用的中台前端和设计解决方案。"
第35期-使用管道模式横切CQRS关注点
在命令处理流程中使用拦截器横切关注点,在 MediatR 命令管道中使用 Behavior 行为拦截 Handler 命令处理器,日志记录行为拦截器,命令验证行为拦截器,分布式日志行为拦截器,将具有泛型参数的行为拦截器注入到容器中,将零度框架项目中引用的包升级到最新版,善用剪贴板历史记录提高粘贴效率,在 NPM 包控制台执行多条数据库迁移命令。
第34期-使用MediatR实现CQRS模式
在基于 DDD 领域模型驱动设计的微服务中,实现 CQRS 查询与命令分离,使用 MediatR 实现 Command 命令模式,编排命令和命令处理程序,将命令封送到命令分发器,使用命令处理程序处理请求,命令不具幂等性,使用装饰器设计模式封装命令去重机制,解决由于网络等其它问题导致的命令重试去重,使用去重命令处理器分发子命令。
第33期-使用Dapper实现CQRS模式
理解 CQRS 命令和查询职责分离模式,在传统的体系结构中,使用同一数据模型查询和更新数据库,为提高数据库的扩展性,使用 CQRS 模式将读取和写入分离到不同的应用模型中,关于数据库读写分离后的主从复制可靠性,在零度框架中使用 Dapper 实现 CQRS 查询模式,抽象并实现数据库连接工厂接口,通过示例学习 CQRS 模式的使用方法,优雅地实现数据记录分页和关键字搜索。
第32期-多租户使用独立数据库部署
租户信息与连接字符串配置,连接字符串提供者接口,默认连接字符串提供者实现,多租户连接字符串提供者实现,从远程租户配置系统读取接字符串,使用数据库连接拦截器动态变更连接字符串,多租户独立数据库部署和迁移方案。
第31期-多租户数据隔离与软删除机制
租户信息异步线程上下文,使用中间件在提取租户信息,多租户数据隔离筛选器,为添加的实体自动设置租户编号,软删除全局筛选器,保存实体变更时分发领域事件,使用保存变更拦截器横切关注点,生成基于多租户和软删除的产品演示数据。
第30期-多租户登录与令牌声明
租户与用户的关系,在用户表添加租户字段,自定义用户声明信息工厂,在访问令牌中关联租户编号,生成租户演示数据,租户系统二次开发和设计,不同租户下用户名的唯一性和重复性,租户用户名规则,为租户提供不同的域名或访问地址。
第29期-多维度动态授权策略访问控制
定义权限策略常量,实现权限定义提供者,显示多语言本地化权限,在容器中自动注入授权相关的接口和实现,在控制器和操作上注解权限策略,生成权限演示数据,运行并演示授权机制,重构权限操作需求,设计并实现基于数据资源的动态授权机制。
第28期-实现OpenAPI帮助文档授权
设置微服务启动端口,在生产平台中部署 OpenAPI 帮助文档,导入演示数据,创建安全操作过滤器,在 IdentityServer 上配置 CORS 跨域资源共享,在 OpenAPI 帮助文档中配置 OAuth 身份认证授权方式,基于 JWT 令牌的 Bearer 身份认证方式,在 API 操作上注解授权特性,基于策略和角色的授权,匿名访问时跳过授权。
第27期-集成第三方外部登录方式
支持第三方外部社交账号登录方式,关于开源 OAuthHandler 处理程序,集成微信登录,集成 QQ 登录,集成支付宝登录,集成微博登录,集成微软账号登录,集成 GitHub 登录,支持更多社交账号登录方式,在配置文件中配置客户端密钥信息,在容器中注入外部认证方式,质询并跳转到第三方外部登录,处理外部登录回调流程。
第26期-实现注销功能与重置密码
创建注销模型,实现注销方法,创建注销确认视图,演示注销流程,创建重置密码模型,实现模型多语言本地化,创建重置密码方法,创建重置密码视图,使用手机验证码重置密码流程,使用工具生成令牌签名所需的数字证书,配置并读取数字证书,演示授权确认页面和接口请求流程。
第25期-实现授权确认页面
理解授权机制工作原理,终端用户,客户端,身份服务器,资源提供者,访问令牌,身份令牌,实现授权确认机制,创建授权确认模型,授权确认控制器,多语言授权确认视图,测试授权过程与请求地址。
第24期-新用户注册与短信验证机制
集成阿里云服务接口,统一处理接口认证,使用短信开放接口,发送短信和邮件,创建注册视图模型并对元数据进行本地化多语言,创建多语言注册视图,注册模型验证,处理远程异步验证,实现前端发送验证码。
第23期-实现优雅的用户登录系统
统一身份认证授权中心需要对外提供登录,注册,双重身份认证,重置密码,找回密码,第三方登录方式,登录控制器,登录界面,视图的本地化与多语言,用户管理与登录管理,实现多语言模型和界面,本地验证与服务端验证,登录成功进入欢迎界面,展示当前登录用户的声明信息。
第22期-单点登录与认证授权微服务
IdentityServer 是基于 .NET 平台开源的 OpenID Connect 和 OAuth 框架,提供身份认证,单点登录,单点注销,使用令牌对 API 访问控制,可集成外部身份提供商,具有高可扩展性,在零度微服务框架中实现单点登录和令牌颁发服务,关于授权中心的用户数据,客户端数据,运行时数据的持久化存储方案,配置依赖注入容器,数据库迁移,生成一些可测试的演示数据。
第21期-权限服务和权限控制器
权限策略定义,授权处理器,授权过程,实现权限应用服务和数据传输对象,查询指定主体的权限分组树,为主体分配指定的权限,生成授权演示数据,使用 WebAPI 权限控制器查询和分配权限,测试并演示授权流程。
第20期-实现授权决定和授权制行控制
关于灵活可扩展授权机制的工作流程,身份认证的目的是确定用户的身份主体,而授权是针对身份主体分配资源的操作权限,理解身份主体,权限策略,资源,操作,授权决定,授权制行,实现 ACL 访问控制列表,使用自定义的仓储存储权限授予列表,基于分布式缓存的权限存储器,可扩展的权限值提供者接口,权限断言检查器,自定义授权处理器。
第19期-权限策略机制的设计与实现
理解基于策略的授权机制,灵活且可扩展的权限定义系统,基于树型结构的权限定义,权限分组定义,权限定义上下文,设计权限定义提供者接口,实现权限定义提供者接口,权限显示名称的本地化多语言,权限定义管理器,扩展微软默认的授权策略提供者,从权限管理器查询权限,并将权限定义转换为授权策略,自定义授权策略提供者的回退机制。
第18期-定制OpenAPI在线帮助文档
使用 OpenAPI 生成优雅美观的在线帮助文档,在项目中添加 OpenAPI 支持,配置 Swagger 依赖注入和中间件,定制并修改页面模板结构,使用样式表美化帮助文档界面,定制图标和品牌标识,使用 Swagger 测试 WebAPI 接口,使用 Curl 命令发起 HTTP 请求并测试 WebAPI 接口。
第17期-表现层的灵活配置与可扩展性
简化 Startup 启动类配置,横向扩展启动类,分离依赖注入和中间件管道的配置,使用 IHostingStartup 接口在启动时从外部程序集向应用添加增强功能,动态配置服务容器,使用 IStartupFilter 筛选器接口动态扩展 Startup 启动类,动态配置中间件管道,实现自定义 IMvcBuilder 扩展方法。
第16期-验证消息多语言与资源编辑器
基于 FluentValidation 链式验证消息的多语言实现,实现并替换默认多语言错误消息,属性显示名称多语言,在模型链式验证器中自定义错误消息并实现多语言,开源的资源文件编辑管理器,资源文件最优雅的编辑方式,使用工具自动翻译并生成多语言资源文件。
第15期-本地化与全球化的多语言实现
国际化,全球化,本地化,区域性,学习 .NET 框架中的语言文化相关类,关于 ASP.NET Core 的全球化与本地化,实现多语言切换功能,基于数据注解验证机制的错误消息多语言,属性显示名称多语言,定制替换微软提供的默认错误消息并实现多语言。
第14期-模型验证机制
在零度框架中实现可扩展的模型验证机制,微软 .NET 框架中基于特性的数据注解验证方式,定制默认错误消息,基于 FluentValidation 实现链式验证,编写链式验证器,在依赖容器中自动注入验证,在 WebAPI 中启用自动模型验证,在代码中调用验证器,同时支持注解验证和链式验证。
第13期-通用增删改查泛型应用服务
数据传输对象 DTO 用于在应用程序层和客户端表现层之间传输数据,理解使用 DTO 数据传输对象的优缺点,实现基于 CRUD 增删改查操作的通用泛型应用服务,使用 AutoMapper 自动映射实体和 DTO 对象,将映射规则的配置自动注入到依赖容器,基于泛型通用应用服务自定义应用服务,在依赖容器中注入泛型应用服务。
第12期-应用程序服务与服务接口调用
理解领域服务与应用服务的区别,应用服务用于实现应用程序的用例,它用于将领域服务的逻辑公开给表现层,在框架中设计并实现应用服务,理解并实现 DTO 数据传输对象,实现 CRUD 增删改查操作,实现分页与排序,在依赖容器中注册应用服务,在表现层 Web API 中调用应用服务接口实现业务用例,使用 Watch 监视命令启动并测试项目。
第11期-设计并实现领域事件
本地领域事件与分布式队列集成事件的区别,使用中介者模式实现本地领域事件机制,可避免交互对象之间的紧耦合关系,实现领域事件接口,当持久化聚合根或实体时自动分发领域事件,编写领域事件,使用 MediatR 中介者实现发布订阅机制,领域事件订阅处理器,在容器中动态注入领域事件订阅者。
第10期-在框架中实现软删除和多租户
设计软删除与多租户接口,使用全局过滤器查询软删除和多租户数据,租户数据存储与租户连接字符串,租户相关实体映射,使用变更跟踪器实现软删除,当前租户访问器,使用 AsyncLocal 和 Dispose 模式实现租户环境灵活切换,通过多租户中间件拦截请求并在上下文中提取租户信息。
第09期-演示数据生成与自定义仓储
使用设计时工厂创建 DbContext 迁移上下文,与 EF Core 无关的数据库初始化与演示数据生成机制,设计数据初始化提供者接口,实现数据初始化接口并在容器中自动注入,在请求管道中启动数据初始化机制,返回可空的实体类型,使用链式依赖注入,项目文档约定,基于通用仓储 实现自定义仓储。
第08期-实体模型映射与数据库表迁移
自动加载模型配置,实体模型映射配置,主键配置,字段约束配置,索引配置,数据表关系配置,自定义值转换器,元组类型与析构器,使用 DbContext 实现泛型通用仓储,依赖容器注入约定,在容器中注入 DbContext 上下文,使用池提高上下文创建性能,在容器中注入 DbContext 上下文工厂,数据库连接重试机制,在容器中注入泛型通用仓储。
第07期-设计并实现基础设施层
学习并理解基础设施层的作用,基础设施层为其它层提供通用的技术能力,提供层间的通信,为领域层实现持久化机制,使用 Entity Framework 框架实现通用泛型仓储,实现异步查询提供者,加载关联数据,领域异常设计,动态生成规约表达,实现并使用规约计算器查询数据,使用 DbContext 上下文实现工作单元。
第06期-规约模式最佳实践
规约模式用于定义可重用、可组合、有意义和可测试的过滤器,简单地说,规约模式就是对查询条件表达式用类的形式进行封装,使用第三方开源代码设计并构建自己的规约模式,抽象规约接口与基本实现,规约计算器,在仓储模式中支持规约查询,规约的组合与生成器,在领域服务中使用规约查询数据。
第05期-创建仓储模式和工作单元
仓储和工作单元模式旨在创建应用程序的业务逻辑层和数据访问提供程序之间的抽象,实现这些模式可让你的应用程序对数据数据持久层的变化不敏感,从而提供对数据访问层的灵活扩展,而且很容易进行自动化单元测试和进行测试驱动开发,实战演练,在项目框架中实现通用泛型仓储和工作单元模式,抽象异步查询器,在仓储上扩展异步查询器。
第04期-领域实体聚合根值对象设计
理解领域模型驱动设计,设计抽象的实体基类,具有独立主键的实体和具有复合主键的实体,设计聚合根接口,设计领域事件通知,多租户接口设计,值对象基类设计,使用记录类型实现值对象,通过示例实战演示,实体聚合根值对象在项目中的应用,通过几个示例学习抽象基类的各种用法。
第03期-在项目中引入可空引用类型
在框架中支持可空的引用类型,使用可为空和不可为空引用类型更清晰地表达设计意图,使用特性注解有助于编译器对可空引用状态的静态分析,使用可为空引用类型迁移现有代码,可以通过使用可空包容运算符消除警告,修改框架项目文件以支持可空引用类型检查。
第02期-实现分布式消息队列集成事件
同步通信与异步通信,实现微服务架构中的事件总线,抽象可扩展的事件总线接口,设计可扩展的事件总线,消息事件定义,事件总线接口抽象,事件处理程序抽象,基于动态类型的事件处理程序,事件与订阅者管理器,使用 RabbitMQ 实现事件总线接口,使用指数退避算法实现连接复原。
第01期-零度框架架构规范与指南
从零开始搭建基于微服务和领域模型驱动设计的分层架构,零度开源仓库地址介绍,学习微软官方最新编码规范,零度框架的搭建以开发简单,多屏体验,前后端分离,灵活部署,最少依赖,最新框架为原则,以物联网平台管理系统为业务模型,参考诸多优秀开源框架,采用主流稳定的技术栈,从零开始搭建企业级架构。
第18期-国外技术网站加速访问方案
不用任何工具的情况下优雅的提高访问国外技术网站的速度,关于域名 DNS 解析原理,本机 HOST 缓存文件,使用在线多地 PING 工具监测网络延迟,提高 Github 访问速度,使用国内代码仓库中转站,使用加速器工具,优雅的从 Github 下载任何子目录代码而不必克隆整个主目录。
第17期-使用AI智能自动编写代码
人工智能可利用计算机和机器模仿人类的思维方式,人工智能的应用极为广泛,也可帮助程序员自动编写一些可复用代码, 微软 AI 智能编程助手接受了数十亿行公共代码的培训和机器学习,让您想要的代码触手可及,节省您的时间,使用 AI 插件扩展实现结对编程。
第16期-学习 Visual Studio 2022 新功能
性能改进支持 64 位处理器,提升加载解决方案的速度,可在文件中更快地查找,理解 .NET 6 中的顶级语句,使用热重载工具提升开发效率,热重载支持 CSS 样式,使用 GIT 的多存储库支持,智能提示的改进可一次自动完成整行代码,基于 Fluent 设计语言的全新外观,轻松打造属于自己的个性化风格,主题与样式定制,使用 .NET 升级助手可将 .NET Framework 应用升级到 .NET 6 框架。
第15期-定制DocFX文档生成工具
学习 DocFX 教程与文档,自定义网站和 PDF 模板样式,高效的增量构建机制,可编程性与扩展性,多语言支持,文档规范化编写指南,提供强大 API 以支持插件二次开发,强大的模板与插件机制,关于 DocFX 在微软文档生成中的应用。
第14期-使用DocFX工具生成帮助文档
使用微软 DocFX 工具生成现代化帮助文档,支持 Markdown 标记语言,跨平台,可扩展,可自定义文档模板和主题,在命令行运行 DocFX 工具,向帮助文档添加文档教程,定制 TOC 菜单,向帮助文档添加项目注释的 API 文档,编译并运行帮助文档网站,将帮助文档网站生成为 PDF 格式文档。
第13期-使用Sandcastle生成帮助文档
安装 Sandcastle 帮助文档生成器,使用独立 GUI 工具生成文档,使用插件与 Visual Studio 集成,当项目重新编译时自动生成文档,微软离线帮助文档查看器,将帮助文档添加到文档查看器,生成 MSDN 样式帮助文档,生成 Markdown 格式帮助文档,生成 Word 格式帮助文档。
第12期-代码注释与标记
使用 MAML 微软协助标记语言注释代码,插入注释的方法,注释的多种用途,注释与智能提示,分离代码与注释,生成注释文档,常用的注释标记,微软提供的代码注释示例,引用单独 XML 文件中的注释,多行注释与单行注释,使用书签标记代码位置,使用任务列表标记并注释代码位置。
第11期-可复用的代码片段
使用 Visual Studio 中的大纲显示折叠代码,可复用的代码片段,查看代码片段管理器,使用代码片段的方式,扩展式代码片段和外侧代码片段,使用外侧代码片段,代码片段替换参数,通过示例创建自定义的代码片段,导入代码片段,分发代码片段。
第10期-理解编码与回车换行符
理解 Visual Studio 中的字符编码集与回车换行符,不可见字符,回车与换行字符的历史预留问题,关于 Windows、Mac 和 Unix 系统换行方式的异同,使用高级保存选项设置文件的编码格式和行尾字符,将高级保存选项添加到文件菜单,使用指定的编码方式打开文件。
第09期-代码编辑器与查找替换功能
语法着色,错误和警告标记,括号匹配,结构可视化工具,行号,更改跟踪,选择代码和文本,缩放,全局撤消和重做,设置文档的格式,大小写转换,将选定行上移或者下移,注释选定内容,查找与替换,渐进式搜索,多个插入点选择,自动换行,使用正则表达式查找与替换。
第08期-创建项目与项模板
项目和项模板提供了可重用的存根,为用户提供了一些可复用的代码和结构,关于 Visual Studio 中的自带模板和自定义模板,分析模板结构与内容,为项目模板添加标签,手动或使用向导创建项目模板,创建多项目模板,手动或使用向导创建项模板,启用特定项目子类型的模板,创建多文件项模板,模板加载故障疑难解决方法,替换模板中的参数,可自定义模板参数。
第07期-管理应用程序资源文件
资源文件是应用程序中不可编译的文件,由于这些文件不是编译过程的一部分,因此更改它们之后无需重新编译,使用 Visual Studio 管理资源文件,使用资源文件构建支持全球化与本地化的应用程序,区域性名称和标识符,获取所有区域性语言文化,当前区域性和当前UI区域性,使用资源文件实现多国语言,理解卫星程序集。
第06期-使用Git托管代码与版本控制
理解 Git 分布式版本管理,使用 GitHub 托管代码,创建分支与同步代码,关于 Git 客户端相关工具对比,在微软 Azure DevOps 平台中托管代码,使用 Visual Studio 克隆或迁出代码,在团队资源管理器中管理版本,阿里云提供的代码托管服务。
第05期-解决方案与项目
在 Visual Studio 中管理解决方案、项目和项,基于 MSBuild 生成器的描述文件,文件扩展名反映项目类型,查看解决方案的 .vs 隐藏文件, 关于 sln 和 suo 扩展名的区别,使用模板创建新项目,添加现有项目到解决方案,创建空白解决方案,在解决方案资源管理器中导航文件,切换视图,打开文件筛选器,与活动文件同步,折叠,显示所有文件,理解并添加自定义文件嵌套规则,查看属性,预览选定项。
第04期-在窗口之间快捷切换
使用切换快捷键可提高开发工具的使用效率,显示和隐藏桌面,离开时随时锁定您的电脑,在打开的应用之间切换,查看 Windows 任务视图,按文件使用顺序在打开的文件之间切换,在所有打开的文件之间切换,在工具窗口之间切换,快捷搜索,如何向微软反馈问题。
第03期-安装VisualStudio的优雅方式
使用引导程序在线安装,工作负载与功能集选择,安装语言包,选择安装位置,脱机安装,创建本地安装缓存,从本地缓存安装,自己动手制作离线安装包和 ISO 镜像,支持并排安装,导入或导出安装配置,更新、修改、修复和卸载,安装离线帮助文档。
第02期-谈谈微软VisualStudio产品线
了解微软 Visual Studio 产品线,关于 Visual Studio、Visual Studio Code 和 Visual Studio for Mac 三大工具,社区版、专业版和企业版的区别与定价,开发、生成、调试、测试、部署、版本控制和 DevOps 开发运维,插件扩展平台,应用中心与订阅,该课程后续计划。
第01期-开发人员如何记录学习笔记
作为开发行业的从业人员,在学习技术的过程中,我们该如何记录学习笔记,微软 OneNote 笔记本的使用方法,图像转文字识别,使用 Note Highlight 2016 插件实现代码高亮显示,教您如何高效地使用 OneNote 记录笔记。
第17期-使用性能计数器跟踪程序性能
微软提供轻量级、跨平台、实时的性能指标收集器,可用于识别和诊断各种程序性能问题,将程序性能指标报告保存到指定文件,将性能指标实时推送到侦听器工具,本视频将介绍如何使用性能计数器探测网站请求吞吐量和并发量,使用计数器探测 EF Core 性能。
第16期-收集并分析托管线程的堆栈
收集进程正在运行的托管线程,收集每个线程的执行堆栈跟踪信息,将收集结果保存到指定的文件,跨平台线程堆栈跟踪工具安装,查看可被收集的进程,使用命令行收集并分析线程堆栈信息。
第15期-收集和分析GC内存转储
收集实时进程的 GC 托管堆垃圾回收器转储快照,从事件流中生成对象根图,使用可视化工具分析托管堆对象占用内存大小,分析对象的引用根,比较多个时间点堆上的对象数,使用命令行分析堆快照,将分析结果输出到文件,使用 PerfView 工具分析程序性能。
第14期-使用快照分析CLR运行时对象
使用内存转储收集和分析实用工具,跨平台转储内存快照的方法,分析 SOS 命令,列出正在运行的托管线程,切换线程,托管代码的堆栈跟踪,深入探索 CLR 如何创建运行时对象,内存结构图,使用命令跟踪对象结构信息。
第13期-使用内存转储调试程序性能
学习内存转储文件,抓取内存快照,在 Visual Studio 中创建转储文件,使用 ProcDump 灵活创建转储文件,在任务管理器中创建转储文件,使用运行诊断分析工具,调试并分析内存泄漏,知道哪些对象占用内存,调试并分析高 CPU 使用率的应用,知道哪些线程或方法占用 CPU 使用率,调试并分析死锁,快速定位死锁位置。
第12期-使用 IntelliTrace 和诊断工具
使用 IntelliTrace 跟踪代码执行的历史记录,自动记录应用程序触发的事件,可缩短调试应用程序所用的时间,发现程序潜在的问题,学习诊断工具的使用方法,诊断指定对象占用内存大小,跟踪 CPU 耗时代码,使用快照可进行历史调试,使用独立收集器在其它计算机上收集跟踪文件。
第11期-多线程与并行任务调试
编写多线程示例,通过代码设置线程名称,在源代码中显示线程,在并行堆栈窗口中查看线程位置,并行监视多线程变量的值,标记线程,冻结和解冻线程,使用条件断点筛选器跟踪指定的线程,切换到另一个线程,多项目启动,调试多个进程,一个进程中断时则中断所有进程,进程窗口中切换,分离进程。
第10期-调试远程计算机或服务器上的程序
理解远程调试原理,下载安装远程调试工具,从 Visual Studio 安装目录运行远程调试器,端口和权限设置,防火墙设置,配置内网穿透,将调试器附加到远程进程,将远程调试工具配置为后台服务,强制使用远程符号,使用调试器控制远程程序的自动启停,推荐一款检查远程端口连接状态的小工具。
第09期-反编译并调试外部源代码
理解用户代码和外部代码,知道调试器在何处查找符号文件,启用源服务器支持,调试 .NET 框架源代码,理解源链接调试原理,启用源链接支持动态下载源码,针对无源码的第三方程序集,在调试时可动态反编译生成符号和源代码,在代码中设置调试器中断。
第08期-调用堆栈与输出窗口
在调试器中查看调用堆栈,显示外部代码的调用堆栈,在代码图上显示调用堆栈,图形化跟踪调用过程,使用堆栈跟踪打印堆栈帧的有序集合,使用编译器提供的特性标记可以获取方法调用方的信息,获取源代码的文件路径、源代码中的行号和调用方的成员名称。
第07期-检查调试器窗口数据
调试程序时可以打开大多数调试器窗口,使用数据提示窗口,可视化复杂数据类型,自动窗口和局部变量,可编辑变量的值,查看返回值,监视和快速监视,使用表达式,刷新监视值,创建对象 ID 编号,反汇编窗口,寄存器窗口,内存窗口,即时窗口。
第06期-调试器异常中断设置
使用调试器异常管理窗口,你可以告知调试器在遇到哪些异常或异常集合时中断,调试器中断时,会显示引发异常的位置,添加和删除自定义异常,向异常添加条件,通过将模块名称设置为条件,可以选择仅在某些代码模块遇到异常时中断执行。
第05期-启动调试器和断点跟踪
如何优雅的设置断点,单步跟踪,逐过程调试,跳出方法,在调试中修改代码,条件断点,筛选器,断点操作,临时断点,依赖断点,使用断点窗口管理断点,断点颜色状态,将调试器附加到进程,使用编码在程序中启动调试器。
第04期-揭秘跨平台调试符号文件
PDB 文件是编译器生成的辅助文件,符号可用于调试和其它诊断工具,符号是源代码和编译器生成的二进制文件之间的映射,调试符号生成设置,查看调试器中程序集所关联的符号文件,可执行文件 PE 和 COFF 头部结构,使用工具查看 PDB 文件结构,关于 PDF 符号下载工具。
第03期-理解平台实现和项目文件
基于 .NET 的应用是针对一个或多个 .NET 实现开发的,每个实现都具有不同的组件,一个或多个运行时 CLR 运行时,基类库,应用程序框架库,一些开发工具,项目与软件开发工具包 SDK 关联,每个项目 SDK 都是一组 MSBuild 目标和相关的任务,它们负责编译、打包和发布代码,使用不同的方式管理引用包。
第02期-开发者工具命令行接口
使用命令行接口 CLI 工具链开发、生成、运行和发布跨平台 .NET 应用程序,创建解决方案,创建项目和类库,将项目添加到解决方案中,向项目中添加包引用,添加项目到项目引用,生成项目及其所有依赖项,单元测试项目,运行项目,监控项目,发布部署项目,打包项目,工作负载管理,让命令行支持智能提示。
第01期-理解 .NET 平台体系结构
理解构建多种应用的开源开发平台,微软 .NET 平台开源仓库,如何优雅的安装 .NET 平台,关于 .NET 平台的发布与计划,理解运行时和 SDK 的区别,检查 .NET 版本信息,理解 X86、X64 和 ARM64 处理器架构的区别,使用微软提供的工具删除并卸载过时的 .NET 版本,管理 .NET 项目和项模板。
第17期-使用 Index 和 Range 结构体
从 C# 8.0 开始,可以使用更加优雅的方式访问数组元素和裁切数组,使用 Index 结构体顺序或倒序访问数组元素,使用 Rang 结构体裁切数组范围,使用更优雅的方式截取字符串,反编译查看实现原理。
第16期-深入理解迭代器
迭代器是一种设计模式,提供一种顺序访问一个聚合对象中各个元素的方法,而又无须暴露该对象的内部表示,反编译 foreach 语句的原理,理解 IEnumerable 和 IAsyncEnumerable 迭代器接口原理,使用迭代器方法的枚举源,同步迭代器和异步迭代器,深入理解迭代器。
第15期-弃元运算符
弃元是一种占位符变量,弃元使代码意图更加明确,可以增强其可读性和可维护性,元组和对象析构中的弃元运算符,模式匹配中的弃元运算符,方法 OUT 参数占位符弃元,独立弃元占位符,下划线也是有效标识符。
第14期-可空的引用类型
可空的引用类型可帮助开发者在编译期间发现潜在的异常,在项目和源码级别开启可空的引用类型支持,可空类型的判断,包容运算符,合并运算符,条件运算符,使用分析器检查可空性,使用特性注解的方式表达可空意图,改变分析器行为,可空的引用类型在 EF Core 中的应用。
第13期-可为空的值类型
需要表示基础值类型的未定义值时,使用可空的值类型,声明和赋值,检查可为空值类型的实例,从可为空的值类型转换为基础类型,提升的运算符,如何确定可为空的值类型。
第12期-优雅的字符串内插法
可格式化对象转换接口,字符串内插法格式,字符串对齐,格式化字符串,内插逐字字符串和转义序列,创建特定区域性字符串,使用多引号原始字符串文本,内插字符串编译原理,优雅的字符串拼接方案,数据库连接字符串拼接,路径拼接和路径合并,网址查询参数拼接技巧,编写自定义内插字符串处理程序。
第11期-使用模式匹配简化代码
高效编写优雅的逻辑判断语句,不仅改善了代码的性能,更重要的是还提高了代码的可读性,通过最全面的示例展示模式匹配的各种语法规则,声明和类型模式,常量模式,关系模式,逻辑模式,属性模式,元组位置模式,关于 var 模式,弃元模式,带括号模式。
第10期-面向对象的类设计
面向对象的基本原则,抽象是将实体的相关特征和交互建模为类,封装的目的是隐藏对象的内部状态和功能,并仅允许通过一组公共函数进行访问,继承可根据现有抽象创建新抽象的能力,多态性是指跨多个抽象以不同方式实现继承属性或方法的能力,通过银行卡开户示例理解面向对象设计的原则。
第09期-细说记录类型的用法
" 理解记录类型,引用类型记录和值类型记录,限制记录类型属性的读写,简化位置记录类型,记录类型的序列化,不可变性,值相等性,非破坏性拷贝,内置显示格式设置,记录类型的继承,记录类型的元组析构器,通过反编译探索记录类型。"
第08期-深入理解元组类型
" 元组的概念,声明元组,探索元组的语法糖与反编译结果,理解 ValueTuple 与 Tuple 的不同和之间的相互转换,元组作为方法的返回值,元组的赋值与比较,析构元组和别名,自定义类型的元组析构器,其实很多系统类型本身都支持元组析构方法,记录类型默认提供析构方法。"
第07期-细说枚举类型
枚举类型是由基础整型数值类型的一组命名常量定义的值类型,定义枚举,实例化枚举,具有位标志的枚举类型,按位运算,枚举类型转换,枚举元素判断,枚举格式化字符串,访问枚举的成员,为枚举类型添加方法,枚举类型的界面显示与描述扩展,多语言显示实现,枚举设计准则。
第06期-布尔类型和字符类型
布尔类型结构解析,布尔值转换为字符串,字符串转换为布尔值,值比较,自定义格式化提供程序,布尔常量字符串表示,其它类型转为布尔类型,将布尔值用作二进制值,字符类型与字符串的关系,学习字符结构所提供的方法。
第05期-基本数值类型系统
合理使用数据类型可有效利用内存空间,整形数值类型,浮点型数值类型,数值类型的静态常量,类型转换系统,数值与字节,字节与字符串,运算符支持,相等性比较,标准数字格式字符串,复合格式字符串,进制表示和转换,隐式类型由后缀确定,显式启用溢出检查。
第04期-理解C#中的类型系统
强类型语言,变量和常量都具有一个特定的类型,理解值类型和引用类型的继承图,值类型包含类型的实例,引用类型包含对类型实例的引用,在内存分配上,值类型存储在栈上,赋值即拷贝副本,引用类型存储在堆上,也称为托管堆,赋值即引用,在内存回收上,值类型堆栈返回即回收,引用类型需要 GC 垃圾回收器。
第03期-使用命名空间整理类型
使用命名空间组织类型,使用嵌套关系定义命名空间,为文件中定义的所有类型声明一个命名空间,命名空间别名,使用静态修饰符导入指定的类型,基于项目全局引入命名空间,指定多个修饰符的命名空间,命名空间别名限定符,隐式引用命名空间,微软命名空间规范准则,使用 API 预览器查找指定类型所在的程序集和命名空间。
第02期-C#语言的反编译与代码保护
类型和变量,值类型和引用类型,程序的执行结构,使用 ILDASM 查看 IL 中间语言,转储 IL 中间语言,直接修改 IL 代码程序逻辑,使用 ILASM 将 IL 中间语言生成为可移植可执行文件,关于 .NET 探秘 MSIL 权威指南,学习 ILSPY 反编译工具,使用 Dotfuscator 工具全方位保护应用程序,推荐命令行解析器开源库。
第01期-C#语言的体系与编译过程
"学习新式的,面向对象的,类型安全的编程语言,理解 C# 语言与 .NET 体系结构,从程序启动说起,新的 C# 模板生成顶级语句,深入代码编译过程,研究 MSBuild 构建,单文件编译,源代码生成器能够在编译用户代码时进行检查,并动态生成新的 C# 源文件,以添加到用户的编译结果中。 "
第22期-使用可视化管理UI界面
使用 IdentityServer 官方提供的 AdminUI 管理界面,使用模板创建管理配置界面,配置开源 IdentityServer4.Admin 库管理后台,提供可编程的 API 接口,运行项目并实战演练,客户端管理,用户管理,角色管理,自定义声明管理,身份资源与 API 资源管理,权限策略管理,授权类型管理。
第21期-其它相关安全配置
多个授权类型的组合,扩展并自定义授权类型,基于浏览器客户端的 CORS 跨域配置与扩展,内置发送与订阅事件扩展性,自定义事件和事件处理程序,日志记录配置,加密密钥与 HTTPS 协议,手动创建令牌工具类,添加更多的 API 端点和添加新协议支持。
第20期-服务发现与请求终结点
理解服务发现目录,扩展服务发现,授权端点,令牌端点,用户信息端点,设备授权端点,自省端点,吊销端点,结束会话端点,开源 IdentityModel 库是基于 OAuth 和 OpenID Connect 协议封装的客户端代理类,可用 IdentityModel 提供的扩展库简化服务发现端点的请求流程,实战演练使用令牌管理器自动刷新令牌,使用令牌管理客户端访问授权 API 资源。
第19期-API资源动态授权范围扩展
实战演练基于 Scope 范围的授权 API 资源机制,定义 Requirement 授权需求,扩展微软 [Authorize] 默认授权特性,同时支持范围、角色和策略授权,实现 Scope 授权范围策略检索提供程序,实现自定义授权处理器,基于应用程序模型自动添加授权过滤器和策略,在依赖注入容器中添加授权相关扩展。
第18期-令牌验证与API资源授权
理解自包含 JWT 访问令牌和自省引用访问令牌,使用 Bearer 认证方式传递令牌,使用 JwtBearer 开源库验证 JWT 令牌的有效性,使用 OAuth2Introspection 开源库验证自省引用令牌,使用 IdentityServer 官方提供的 AccessTokenValidation 扩展自动识别并验证前后两者,基于 Scope 范围的 API 策略授权扩展,使用 HTTP 监听工具分析访问令牌验证机制。
第17期-刷新令牌与访问令牌
访问令牌的有效期,刷新令牌工作机制与相关设置,使用刷新令牌请求访问令牌,自定义刷新令牌行为,访问令牌的自包含格式和引用格式,将访问令牌绑定到客户端,基于 TLS 证书认证客户端,使用 X509 证书和 JSON Web Keys 签名 JWT 格式令牌,自定义令牌请求验证和发行逻辑。
第16期-单点登录与单点注销配置
单点登录 Cookie 相关配置,登录用户界面和身份管理系统,登录工作流程,外部身份提供商登录相关配置,触发身份验证处理程序,处理回调并登录用户,支持 Windows 身份认证,单点登出注销配置,删除 Cookie 身份验证,通知其它客户端用户已注销,前通道注销通知,后向通注销通知,用户会话管理终结点,退出外部身份提供商。
第15期-客户端相关配置
定义客户端,基于 IClientStore 接口的客户端存储实现,在配置文件中定义客户端,客户端基本配置,认证与登录登出配置,相关令牌信息与有效期配置,关于身份令牌、访问令牌和刷新令牌配置,授权交互页面相关配置,设备流授权模式相关配置。
第14期-定义身份资源与API资源
令牌的最终目的是控制对资源的访问权限,理解身份资源和 API 资源的区别,关于资源存储 IResourceStore 接口,身份资源与用户声明信息,实现 IProfileService 接口可扩展身份数据提供机制,定义 API 授权范围,在访问令牌中附加用户信息,参数化授权范围扩展,定义 API 资源并关联 API 授权范围。
第13期-依赖注入与相关配置
配置依赖注入服务,配置密钥,基于内存的配置,测试用户,配置扩展服务实现,缓存配置,配置中间件管道,自定义用户配置文件存储的实现,终结点配置,服务发现配置,认证方式配置,事件配置,输入长度限制,用户交互界面配置,跨域 CORS 请求配置,内容安全策略,设备流授权模式相关配置。
第12期-Identity和IdentityServer集成
基于微软 ASP.NET Core Identity 扩展用户数据存储机制,在 IdentityServer 中集成微软 Identity 用户管理方案,使用模板创建 Identity 基架项目,使用扩展库与现有项目无缝集成,扩展用户与角色,创建用户管理 DbContext 上下文,迁移微软 Identity 数据库架构,生成演示数据,更新基于微软 Identity 实现的用户 UI 交互界面。
第11期-基于EfCore存储认证授权数据
将 IdentityServer 服务的配置和运行数据保存到数据库,使用官方模板创建基于 EfCore 存储实现的 IdentityServer 项目,现有项目可使用扩展包进行集成,使用 EfCore 迁移工具创建 IdentityServer 数据库架构,官方提供完整 SQL 脚本,配置数据存储机制,添加架构迁移支持,初始化数据库并添加演示数据,运行并测试配置结果。
第10期-使用JwtBearer授权API接口
理解 JWT 格式令牌与 Bearer 身份认证,认识 Cookie 与 Bearer 身份认证的区别,将令牌设置到 HttpClient 请求标头,获取访问令牌和身份令牌的方式,关于 API 资源,身份资源,授权范围,用户和客户端配置,在访问令牌中封送客户端声明和用户声明信息,声明信息映射转换,基于 SPA 单页应用的 JavaScript 身份认证与授权,支持 Vue 和 Angular 扩展, 客户端 CROS 跨域配置,了解 Fetch API 和 Promise 技术。
第09期-设备流授权模式与扫码登录
在某些输入受限的设备上,要完成用户名和密码口令的输入是非常困难的,设备流授权模式,可让用户在另一台设备上使用验证码或扫描二维码的方式登录认证并授权,常见的应用场景包括智能电视、基于 IOT 物联网的设备、打印机和其它需要简化认证或受限的设备。理解设备流授权过程,学习微软 OAuth 2.0 设备权限授予流程图,关于二维码生成解决方案,轮询访问令牌终结点,使用令牌请求 API 接口。
第08期-添加外部第三方认证支持
配置 IdentityServer 依赖注入和中间件,微软内置身份认证提供程序与开源代码,添加外部提供程序身份验证,使用第三方开源程序包实现微信登录,腾讯QQ登录,新浪微博登录,使用 OpenID Connect 集成外部身份认证,跟踪外部提供程序身份认证流程,关于短信验证码登录方式。
第07期-混合授权模式组合授权
混合 Hybrid 授权模式是隐式简化模式和授权码模式的组合,深入理解身份认证与授权的关系,关于 OpenID Connect 与 OAuth 2.0 协议,身份令牌与访问令牌,配置 IdentityServer 客户端为 Hybrid 模式,设置 OpenId Connect 响应类型,跟踪认证与授权过程,设置多种授权模式组合。
第06期-使用PKCE机制校验授权码
授权码容易受到非法拦截攻击,攻击者获得了授权码的访问权,它就可以使用授权码来获取访问令牌,使用 PKCE 验证码交换证明密钥机制可有效保护授权码的安全性,配置 IdentityServer 支持 PKCE 校验,在 OpenID Connect 身份认证中启用 PKCE 行为,跟踪 PKCE 授权码机制的工作流程。启用刷新令牌,设置访问令牌的生命周期,在客户端获取刷新令牌,使用刷新令牌换取新的访问令牌和身份令牌,使用自带常量而不是硬编码。
第05期-使用交互式授权码模式
" 隐式授权模式与授权码模式的区别,理解授权码请求与跳转流程,客户端使用授权码换取访问令牌,定义用户与客户端,配置 OpenID Connect 身份认证方式,设置授权码的响应模式,使用 Cookie 默认认证方式保存并传递加密令牌,身份令牌与用户声明转换映射,单点登录与退出。"
第04期-使用交互式隐式授权模式
理解客户端凭证模式、资源拥有者密码模式和交互式 Implicit 授权模式的区别,身份认证与令牌颁发流程,访问令牌与身份令牌的区别,定义用户和客户端,集成用户 UI 交互界面,定制登录注销和授权确认页面,配置 OpenID Connect 身份认证方式,保存令牌与用户声明信息。
第03期-基于用户密码保护API接口
资源拥有者密码授权与客户端凭证授权的区别,自定义身份标识资源,定义用户与声明信息,限定客户端授权范围,基于用户密码申请访问令牌,使用令牌在用户终结点上获取身份信息,使用令牌请求授权 API 接口,在 API 接口中使用 HttpContext 获取访问令牌,理解 JWT 令牌格式,关于 JWT 令牌声明信息与 ASP.NET Core 用户声明之间的转换映射,扩展用户密码验证逻辑。
第02期-使用客户端凭证保护API接口
在 ASP.NET Core 应用程序中配置 IdentityServer 服务,定义 API 资源,定义客户端,创建并配置 Web API 项目,创建客户端程序,请求终结点发现服务配置,获取访问令牌,使用 Bearer 方式传递令牌并请求 API 接口,关于 JWT 令牌与用户声明信息的映射,实现基于角色与策略的授权机制。
第01期-技术简介与相关术语
IdentityServer 是基于 ASP.NET Core 框架的身份认证与授权解决方案,关于 OpenID Connect 与 OAuth 2.0 协议,多平台支持,单点登录,令牌访问,可集成外部身份提供商,现代化应用程序架构中的通信方式与身份认证,理解用户、代理程序、客户端、资源、身份令牌、访问令牌、授权码和刷新令牌等术语,理解四种不同授权类型获取令牌的流程。
第64期-关于 EF Core 6.0 新功能与升级
使用临时时态表,查询和还原历史数据,迁移捆绑包,预先约定模型配置,已编译的模型,全方位提高性能,根据现有数据库对模型进行反向工程时的多项改进,支持可为空引用类型,数据库注释与代码注释同步,基于LINQ 查询增强功能,字符串可空判断和截取,使用代码行号标记查询 SQL 语句,新的映射注解属性,模型生成改进,支持稀疏列,值转换器改进,自定义多对多关系中间表,改进 DbContext 上下文工厂和依赖注入,创建表时对列进行排序设置,连接字符串中的连接超时与命令超时设置。
第63期-继续学习 EF Core 5 的新功能
重置上下文快照的状态,数据库优先反向工程单数形式,多操作事务的可回滚到保存点,关联集合的拆分查询,使用特性标记创建数据库索引,提供 IPAddress 映射,将更多的本地 LINQ 转换为 远程 SQL 命令,可提供参数的设计时上下文工厂,配置计算列,设置小数列的有效位数和精度,索引填充因子,加载集合导航属性时可指定筛选条件,简单的日志记录,提供生成 SQL 的简单方法,可随时更改上下文的连接字符串,更改跟踪代理,增强的调试视图,为枚举映射生成检查约束。
第62期-关于 EF Core 5 的改进与升级
无需显式映射联接表,将 SQL 查询结果映射到实体类型,使用事件计数器分析 EF Core 性能,将字典类型映射到数据库表,提供数据保存前后的事件订阅和拦截器,从迁移中排除表,固有实体类型一对一依赖项非空配置,使用事务迁移多个脚本,使用命令查看挂起的迁移,值转换器与比较器,改进最大批处理大小,读取开发环境信息,迁移时指定列的排序,查询性能改进,支持字段映射,继承层次中的 TPH 和 TPT 映射,支持继承层次的分表存储,映射表值函数,灵活查询和更新映射,上下文范围支持拆分查询,在容器中注册上下文工厂。
第61期-关于 EF Core 3.0 中断性变更
现有应用程序升级到 3.0 版本时,有的 API 更改和行为可能导致程序中断,针对每个变化点的旧行为、新行为、为什么、缓解措施和影响范围,不再客户端上计算 LINQ 查询,EF Core 3.0 面向 .NET Standard 2.1 标准,之前版本中的 FromSql、ExecuteSql 和 ExecuteSqlAsync 已重命名,查询类型与实体类型合并,级联删除立即发生,元数据 API 已更改。
第60期-学习 EF Core 3.0 新特性
EF Core 3.0 新版版本中包含多个重大变更,可基于 LINQ 语句检查并评估客户端执行,使用 JOIN 合并 Include 生成的 SQL 指令,避免 N+1 查询,支持 C# 8.0 语言中的异步流和可空引用类型,异步查询结果可用新的标准接口公开,并可通过 await foreach 使用,新增数据库操作拦截器,支持反向工程无主键的表和视图,.NET Core 3.0 中还可以直接运行原始版本的 EF 6.3+ 框架。
第59期-性能优化方案
深入理解性能优化,方案与建议,优先使用 AddDbContextPool 注入上下文实例池, 使用 EF.CompileQuery 显式编译查询,多活动结果集 MARS 数据库连接复用,使用 Async 异步方法提高吞吐量,设置批处理语句,创建索引提高查询性能,避免 N+1 查询,跟踪与非跟踪查询,关闭 DetectChanges 状态同步,数据缓存,使用 EF.Functions.Link 构建模糊查询,标记 DbFunctionAttribute 映射标量函数方法存根。
第58期-数据库分区分表分库与读写分离
将 EF Core 2.2 项目升级到 3.0 版本,使用索引优化查询性能,评估执行计划,数据库引擎优化顾问,使用分区文件将数据存储至多个物理区块,减少磁盘读写开销,提高吞吐量,分表设计将表按指定的规则分解成多个具有独立存储空间的实体表,分库设计可单独服务器集群部署,更好提高大数据扩展能力,对于时效性不高的数据,可以通过读写分离缓解数据库压力,主从复制,微软 SQL Server 提供的复制、日志传送、镜像和 AlwaysOn 数据同步技术,在 EF Core 中通过动态切换数据库和表来实现读写分离。
第57期-相关工具与扩展
使用相关工具和扩展库为 Entity Framework Core 提供更多的附加功能,数据库优先、模型优先和代码优先生成器,强大直观的 ORM 设计器,可视化反向工程和数据库迁移管理,使用可定制的模板自动生成代码,可自动生成视图模型,链式验证规则和模型映射器代码,历史审计日志保存,轻松构建基于字符串的 LINQ 动态表达式,支持二级缓存查询数据,简单访问元数据与配置,支持高性能批量插入、批量更新、批量删除和批量读取。
第56期-使用Fluent方式验证数据
使用 Code First 的编程方式常基于 Fluent API 配置模型,EF Core 不支持 Fluent API 验证规则,使用快照和元数据信息扩展 SaveChanges 方法,使其同时支持数据注解验证规则和 Fluent 验证规则, 使开源的 FluentValidation 验证框架分离实体和验证规则。
第55期-使用规则注解特性验证数据
针对 EF Core 的所有操作默认都不会验证模型,事先验证模型可避免不必要的性能开销,捕获 DbUpdateException 数据库更新异常,基于 ValidationAttribute 规则注解特性的通用验证方案,编写简单的数据注解验证示例,当执行 SaveChanges 方法保存数据时自动验证模型,编写并扩展注解特性,实现 IValidatableObject 接口可提供用于实体验证的方式。
第54期-动态模型配置
使用元数据信息动态配置表和列模型,理解 OnConfiguring 和 OnModelCreating 配置方法,最简单的实体配置方法,使用表达式分离配置,使用方法分离配置,使用单独类分离配置,自动加载项目中的配置类,重写并扩展 DbContext 提供的相关方法。
第53期-查询实体的元数据
什么是元数据,为何需要元数据,关于 EF Core 底层提供的元数据接口,使用 DbContext 或 ModelBuilder 提供的 IModel 模型接口查询元数据信息,实体与表的元数据,属性与列的元数据,学习编写自己的 Expression 表达式方法,扩展并封装一个查询属性元数据的 Lambda 表达式解析器。
第52期-数据库SQL操作日志记录
使用 SQL Server Profiler 工具捕获事件日志并将其保存到文件或表中供以后分析。学会使用微软 XEvents 扩展事件探查器跟踪事件日志,以排除故障或确定性能问题,根据自定义向导定制扩展事件探查器。使用 Visual Studio 中提供的 IntelliTrace 智能跟踪工具记录应用程序中的特定事件和这些时间点上的发生的数据,学会使用 SQL Server 日志管理器分析问题。使用 NLog 框架输出 EF Core 的执行日志到指定的文件,启用敏感数据日志记录标记以输出执行参数。
第51期-捕获审计日志数据
对于大多数程序而言,对数据库的更改都需要可追溯,通过日志记录可追溯变更,当发生误操作时,可追责到具体的责任人,从数据库层面,很多数据库本身都支持日志记录功能,配置 SQL Server 中的变更数据捕获和更改跟踪功能可实现日志自动记录,从应用程序层面,根据不同的需求,可通过不同的方案捕获审计数据,创建审计字段记录变更,通过历史审计表实现更详细的变更记录,应用开源库轻松记录变更日志,理解 ABP 框架中审计日志的应用场景。
第50期-数据库提供程序优化与单元测试
Entity Framework Core 支持通过不同的数据库提供程序访问许多不同的数据库,随着 .NET Core 的发展和开源社区的活跃,支持的提供程序也越来越多,使用 NuGet 包管理器向应用程序中添加数据库提供程序,使用 SQL Server 内存优化表提高数据访问性能,关于 SQLite 的内存模式和 In-Memory 数据库提供程序,基于内存驻留的数据库提供程序可避免单元测试不受IO读写操作的开销,关于数据访问单元测试,为数据库引擎编写自己的数据库提供程序,提供程序命名约定规则。
第49期-仓储与工作单元模式
仓储库和工作单元模式旨在创建数据访问层和应用程序的业务逻辑层之间的抽象层,实现这些模式可让你的应用程序对数据数据持久层的变化不敏感,从而提供对数据访问层的灵活扩展,而且很容易进行自动化单元测试和进行测试驱动开发,学习微软官网基于仓储与工作单元模式的简单实现,基于 Entity Framework Core 框架实现通用的仓储与工作单元模式,在 ASP.NET Core 中依赖注入工作单元,实现并注入自定义的实体仓储类。
第48期-属性变更事件追踪策略
如果上下文中加载了大量的实体准备修改,使用 DetectChanges 会造成性能开销,可通过快照提供的相关方法显式变更快照值,基于属性变更事件的追踪策略,当属性变更时可自动同步快照状态,可用 ChangeTrackingStrategy 枚举设置变更追踪策略,订阅 Tracked 和 StateChanged 事件,理解 HasChanges、SaveChanges、AcceptAllChanges、Load、Reload 和 Local 的使用方法。
第47期-变更追踪策略与原理
理解的 Snapshot 快照式变更追踪机制,使用 DetectChanges 方法可检测对 POCO 实体的属性和关系所做的更改,在上下文中使用 Entry 方法捕获实体快照,查询当前快照的实体状态、数据库值、原始值和当前值。分别在属性变更前后通知外部客户端,实现 INotifyCollectionChanged 接口,当添加和删除项或清除整个列表时,向侦听器通知动态更改,集合 ObservableCollection 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
第46期-上下文DbContext的生命周期
数据库连接管理,使用 CanConnect 方法检测连接状态,可用 GetDbConnection 方法访问当前连接,通过 OpenConnection 打开连接,使用 CloseConnection 关闭连接,理解连接池原理,查看当前数据库已连接的会话,配置连接池,关于 using 语句与 IDisposable 接口,释放 DbContext 上下文相关的资源,阅读微软 DbContext 源代码,分析相关资源的释放逻辑,关于上下文依赖注入的生命周期,理解 DbContext 的线程非安全性。
第45期-事务隔离级别与死锁
显式事务与隐式事务,有关事务管理的扩展方法,根据业务逻辑显式提交或回滚事务,事务隔离级别场景举例,编写示例代码演示隔离级别,理解读未提交、读已提交、可重复读和串行化隔离级别,通过示例代码演示由事务引发的脏读、不可重复读和幻读问题,分析事务死锁产生的原因,在活动与监视器中查看数据库资源的使用情况,使用 SQL Server Profiler 工具和 扩展事件会话管理器,查看死锁图,分析死锁图上的会话进程、占有资源锁和死锁牺牲品。
第44期-使用事务
关于 EF Core 中的默认事务支持,使用微软 SQL Server Profiler 工具跟踪监控事务,控制相同 DbContext 上下文事务,控制跨 DbContext 上下文事务,使用外部 DbTransactions 事务,在同一个事务中执行 ADO.NET 操作 和 EF Core 操作,环境事务类 TransactionScope 和 CommittableTransaction 的用法,本地事务与分布式事务协调器,关于目前微软 .NET Core 平台中分布式事务的可用性。
第43期-事务基础知识
事务的基本概念与 ACID 特征,原子性、一致性、隔离性和持久性特征,学习读未提交、读已提交、可重复读和串行化隔离级别,由事务引发的脏读、不可重复读和幻读问题,隔离级别对性能和安全性的影响,悲观锁、乐观锁、共享锁、排它锁、更新锁、意向锁和架构锁,了解事务原理,学习 SQL Server 锁机制和事务隔离级别,关于死锁的分析与解决方法。
第42期-删除数据的多种方案
使用 DbContext 或 DbSet 提供的 Remove 方法删除数据,可显式设置 EntityState 状态删除数据,对已跟踪和未跟踪状态的实体分别执行删除操作,可用 RemoveRange 方法批量删除数据,调用存储过程或原生 SQL 删除数据,级联删除规则,必需和可选外键关系对删除规则的影响,理解 Cascade、ClientSetNull、SetNull 和 Restrict 删除行为,学习微软提供的各种删除行为示例代码,从而理解不同删除行为对内存依赖项和数据库依赖项的影响。
第41期-自动设置属性的显式值
自动生成属性值是指在添加或更新实体时由数据库自动为字段生成显式值,使用 HasDefaultValue 或 HasDefaultValueSql 在添加期间生成字段的默认值,将显式值插入到数据库 IDENTITY 列,使用数据库触发器在更新期间为字段生成值,分别使用 ValueGeneratedNever、ValueGeneratedOnAdd、ValueGeneratedOnUpdate 和 ValueGeneratedOnAddOrUpdate 方法改变生成值的行为。
第40期-更新数据的多种方案
快照式变更跟踪器原理,已跟踪实体数据的更新,更新未跟踪的断开实体,显式修改 EntityState 状态,分别使用 DbContext 或 DbSet 的 Update 和 Attach 方法更新实体,三种更新方式的异同,可通过遍历对象图手动设置需要更新的属性字段,理解数据库值、当前值和原始值的区别,用 EntityEntry 跟踪信息类的 IsKeySet 属性可判断实体是否设置键值,使用 TrackGraph 跟踪对象图,修改外键值或导航属性均可更新实体所关联的数据。
第39期-添加数据的多种方案
理解 EF Core 中的 ChangeTracker 快照式变更跟踪器,用 EntityState 表示实体状态,查看微软开源代码,使用 Add、AddAsync、AddRange 和 AddRangeAsync 方法添加数据,使用 Attach 和 AttachRange 方法添加数据,通过修改实体状态的方式添加数据,添加具有关系图实体的数据,关于自增主键数据的添加,使用批处理语句获得更好的性能。
第38期-多租户系统架构的最佳实践
全局筛选器的限制,多租户架构的实现方案,多数据库多部署方案,多个数据库单部署方案,单数据库单部署方案,混合数据库单部署方案,单多混合数据库多部署方案,每种方案的优缺点,选择架构需要多方面因素,理解多租户与多用户的区别,多租户架构在 ABP 和 OrchardCore 框架中应用,使用 ASP.NET Core 与 Entity Framework Core 技术轻松实现自己的多租户系统,开源多租户架构示例代码。
第37期-全局查询筛选器与逻辑删除
在 EF Core 中使用查询筛选器设置查询数据的全局条件,使用 HasQueryFilter 方法设置全局筛选器,可用 IgnoreQueryFilters 对特定的查询禁用筛选器,支持 Include 使用全局筛选器加载关联的导航属性,理解逻辑删除与物理删除,使用全局筛选器轻松实现逻辑删除,通过 ISoftDelete 接口约定实体的软删除行为,使用 Expression 动态生成基于全局筛选器的 Lambda 表达式,扩展软删除通用逻辑。
第36期-异步查询&工作原理&注释标记
当在数据库中执行查询时,异步查询可避免阻止线程,从而增加应用程序的吞吐量,Entity Framework Core 提供了一组 Async 后缀的异步扩展方法,可用于执行异步查询,理解 async 和 await 异步关键字的工作流程。有的查询只会在内存中构建查询表达式树,只有在使用结果时,查询才会被推送到数据库执行。理解 EF Core 查询数据的工作流程和原理。可使用 TagWith 方法对 LINQ 查询生成的 SQL 语句标记注释,这有利于后续日志跟踪。
第35期-执行原始SQL查询
在 EF Core 中使用 FromSql 方法执行 SQL 查询语言,执行数据库存储过程,理解 SQL 注入攻击,查询时传递参数的方式,参数占位符,字符串内插语法,用 DbParameter 传递参数,关于 FormattableString 与 String 的在传递参数上的区别,原始 SQL 查询与 LINQ 查询混合使用,原始 SQL 查询与状态跟踪器,关联导航属性相关数据,注意事项和一些限制,使用 ExecuteSqlCommand 执行更多 SQL 语句。
第34期-客户端与服务端求值&跟踪与非跟踪查询
客户端与服务器评估,客户端求值性能问题,求值日志记录,客户端求值引发异常,EF Core 支持部分查询在客户端中求值,而将其它部分推送到数据库执行。跟踪与非跟踪查询,跟踪行为可控制是否将实体实例的信息保留在跟踪器中,如果已跟踪某个实体,则该实体中检测到的任何更改都会在 SaveChanges 期间永久保存到数据库,使用 AsNoTracking 可进行单个非跟踪查询,使用 QueryTrackingBehavior 在上下文实例级别更改默认跟踪行为,投影与跟踪。
第33期-预先加载&显式加载&延迟加载
加载关联导航属性的三种方式,使用 Include 和 ThenInclude 加载导航属性,多个导航属性预先加载,多层导航属性预先加载,派生类型上的导航属性预先加载,忽略导航属性加载时的警告与错误。基于 DbContext 提供的 Entry 方法, 可用 Collection 方法关联集合导航属性,可用 Reference 方法关联引用导航属性,调用 Load 执行显式加载行为。实现最简单的自动化延迟加载,使用 ILazyLoader 接口实现延迟加载,基于 Action 匿名委托实现延迟加载。
第32期-数据查询与SQL语句生成
分别理解生成操作、相等比较、串联运算、联接运算、数据分组、投影运算、数据分区、数据排序、集合运算和限定符运算,关于这些操作的远程支持与本地支持,它们如何生成与数据库相关的 SQL 语言,查询性能优化建议。
第31期-本地查询&远程查询&生成SQL语句
理解 IEnumerable 、IQueryable 和 DbSet 类型的区别,远程查询与本地查询,基于 IQueryable 的异步扩展方法,Func 与 Expression 区别,跟踪 EF Core 的执行过程,将执行的 SQL 日志输出到控制台,分别理解元素操作、聚合运算和数据筛选,关于这些操作的远程支持与本地支持,它们如何生成与数据库相关的 SQL 语言。
第30期-元素操作&集合运算&转换类型
使用 Zip 方法将两个序列通过指定的函数进行合并,元素操作可从序列中查询唯一特定的元素,对单元素进行操作,聚合运算可从值集合中计算出单个值,可使用 Aggregate、Average、Count、LongCount、Max、Min 和 Sum 方法进行聚合运算,转换方法可将序列转换为其它数据类型的序列,可使用 AsEnumerable、AsQueryable、Cast、OfType、ToArray、ToDictionary、ToList 和 ToLookup 方法转换数据类型。
第29期-生成操作&相等比较&串联运算
生成运算是指创建新的值序列,使用 DefaultIfEmpty、Empty、Range 和 Repeat 方法生成集合序列,两个序列相等是指它们具有元素相等且相同数量,可使用 SequenceEqual 方法判断集合序列相等性,基于 IEquatable 和 IEqualityComparer 接口自定义相等比较器,串联运算是指将一个序列附加到另一个序列的运算,可使用 Concat 方法进行串联操作。
第28期-联接运算与数据分组
联接就是将一个数据源中的对象与另一个数据源中具有相同公共属性的对象相关联,左外联接、右外联接、内联接和全联接的区别,使用 Join 和 GroupJoin 方法进行联接运算,分组是指将数据分到不同的组,使每组中的元素拥有公共的属性,使用 GroupBy 和 ToLookup 方法对数据进行分组,理解前后两者的区别。
第27期-投影运算与数据分区
投影是指将对象转换为一种新形式的操作,分别使用 Select 与 SelectMany 方法进行投影运算,分区是指将输入序列划分为两个部分的操作,使用 Skip、SkipWhile、Take 和 TakeWhile 方法进行数据分区,理解 .NET Core 3.0+ 与 .NET Standard 2.1+ 中新增的 SkipLast 和 TakeLast 数据分区方法。
第26期-排序&集运算&筛选&限定
学习 LINQ 语言集成查询, 关于 DbSet 数据结构,理解 IEnumerable 与 IQueryable 的区别,使用 OrderBy、OrderByDescending、ThenBy、ThenByDescending 和 Reverse 方法对数据进行排序,使用 Distinct、Except、Intersect 和 Union 方法对两个集合进行交差并去重运算,使用 Where 和 OfType 方法筛选数据,使用 All、Any 和 Contains 方法进行限定符运算。
第25期-团队环境中的迁移
集中式版本控制与分布式版本控制,分布式 Git 版本控制系统,工作原理与操作方法,在 GitHub 上创建代码仓库,使用 Visual Studio 团队资源管理器连接 GitHub 远程仓库,可视化提交、推送、拉取和同步工具,团队协作中的迁移冲突,比较文件,快速合并冲突,采用远程,保留本地。
第24期-反向工程与相关工具
使用反向工程工具将现有数据库生成模型代码,指定提供程序名称,架构与表筛选,保留数据库名称,数据注解优先原则,更改上下文名称,设置目录与命名空间,关于 PMC 与 CLI 命令行工具参考,在 ASP.NET Core 中创建上下文,无参数的构造函数上下文的创建,从设计时工厂创建上下文。
第23期-配置迁移操作
多个提供程序的迁移支持,维护两个不同版本的迁移集,单个迁移集自定义,配置迁移历史记录表,理解 EnsureDeleted,EnsureCreated 和 Migrate 可编程接口,在生产平台中应用迁移。
第22期-自定义迁移操作
使用 MigrationBuilder API 在迁移过程中执行不同的操作,使用 MigrationBuilder 提供的 SQL 方法灵活操作数据库,多个提供程序的迁移支持,使用 MigrationOperation 分离 SQL 自定义操作,将迁移文件存储到单独的项目,维护多个迁移集。
第21期-数据库模型迁移工具
模型与数据库同步方案,基于模型优先的迁移和基于数据库优先的反向工程。学习 PMC 和 CLI 环境下的迁移工具,创建迁移,理解迁移时生成的文件,应用迁移更新数据库,删除迁移脚本,回滚还原迁移,基于迁移生成数据库 SQL 脚本,轻松删除数据库,在运行时通过编程方式调用迁移,通过编程方式生成迁移数据库 SQL 脚本。
第20期-查询类型映射
实体类型映射与查询类型映射,在数据管理工具中使用可视化工具创建视图,在 Entity Framework Core 中使用 ExecuteSqlCommand 命令创建视图,理解 DbSet 与 DbQuery 的区别,分别将查询集合类型映射到数据库视图和原始查询语句。
第19期-多模型切换与空间数据模型
使用 DbContext 上下文中的属性来更改模型的构建方式,实现 IModelCacheKeyFactory 模型缓存键工厂接口,更改模型创建缓存机制。基于 GIS 地理信息系统的 NetTopologySuite 开源库,在 EF Core 中使用空间数据模型存储物理位置和形状对象。
第18期-数据库序列配置
理解 SQL Server 数据库中的序列,使用 SSMS 创建并使用序列。在 Entity Framework Core 中使用 HasSequence 创建并配置序列,设置起始值和增量,将字段的默认值关联到序列,使用 ForSqlServerUseSequenceHiLo 将数据库表的自增主键关联到指定的序列,数据库序列在微软开源项目中的应用。
第17期-数据模型配置
设置数据库表的名称与架构,列名设置,字段类型和元数据设置,主键约束名称,数据库默认 Schema 架构修改,数据库表中的计算列,为数据库指定字段设定默认值。
第16期-具有构造函数的实体类型
理解 Entity Framework Core 使用构造函数的实体类型,默认无参构造函数,显式指定无参构造函数,有参构造函数的命名约定,私有构造函数的可访问性,在实体中使用构造函数依赖注入服务。
第15期-数据库初始化
学习 EF Core 中初始化演示数据的三种方式,使用 DbContext 上下文的 SaveChanges 方法生成演示数据,通过 EnsureCreated 确认创建数据库,使用 ModelBuilder 的 HasData 方法生成演示数据,固有的实体类型数据初始化,在迁移脚本中使用 MigrationBuilder 的 InsertData、UpdateData 和 DeleteData 更灵活的处理演示数据。
第14期-值转换器
关于 Entity Framework Core 中数据库字段类型与 CLR 类型的转换原理,使用 Fluent API 配置值转换器,创建并使用 ValueConverter 值转换器,自定义转换器,微软内置的转换器,预定义转换器。
第13期-私有字段映射
理解属性与字段的区别,读访问器与写访问器,使用 Visual Studio 提供的快速操作和重构功能封装字段,关于 Entity Framework Core 中针对私有字段映射的基本约定,使用 Fluent API 显式将属性访问映射到特定字段,为隐藏属性访问器指定私有字段,使用 PropertyAccessMode 枚举设置属性访问器模式。
第12期-表拆分与固有实体类型
理解 EF Core 中的表拆分, 继承映射与表拆分的区别,将多个实体映射到同一个数据表,固有实体类型,使用 OwnedAttribute 数据注解配置,使用 Fluent API 配置固有类型,设置固有类型生成的表字段,配置多个相同类型的固有属性,嵌套固有的类型,将固有类型映射到单独的表,固有类型的集合配置,固有类型的查询方式。
第11期-继承关系映射
理解继承关系映射约定,表结构 Discriminator 字段解析,在 Entity Framework Core 显式设置基类,删除继承单表关系约定,非继承情况下的分表模式,修改 Discriminator 标识列属性,修改标识列字段名称与类型,指定标识列的数据值。
第10期-数据库索引与备用键约束
数据库索引原理与配置,在 Entity Framework Core 中创建索引,配置唯一索引,复合多列索引,修改索引名称,索引筛选表达式。备用键约束,配置备用键,复合多列备用键,设置备用键约束名称。
第09期-级联删除规则
数据库关系图,外键关系约束,创建或重新启动时检查现有数据,更新与删除规则设置,关于不执行任何操作、级联、设置 Null 和设置默认值规则的差异,强制外键约束,在 Entity Framework Core 中使用 OnDelete 方法配置关系约束删除规则。
第08期-实体关系配置
使用 HasForeignKey 和 HasPrincipalKey 配置主键之外的属性作为外键,外键的必需与可选约束,一对多关系,一对一关系和多对多关系配置。
第07期-导航属性关系配置
使用 InverseProperty 特性配置多导航属性关系,关于 ForeignKey 特性外键设置,通过 HasOne 或 HasMany 配置导航属性,调用 WithOne 或 WithMany 配置反向导航属性,设置单向导航属性,单个主键与外键,复合主键与外键,显式或隐式的方式指定主键与外键。
第06期-隐藏属性与关系术语约定
隐藏属性的约定与配置,设置隐藏属性值,对隐藏属性执行查询。关于 Entity Framework Core 中的关系术语定义,依赖实体,主体实体,外键,主键,导航属性,集合导航属性,引用导航属性,反转导航属性,默认约定与外键规则,使用 ForeignKeyAttribute 特性和 HasForeignKey 方法显式设置外键。
第05期-并发冲突与令牌
理解 Entity Framework Core 并发冲突原理,悲观并发与乐观并发,分别使用 ConcurrencyCheckAttribute 特性和 IsConcurrencyToken 方法将属性配置为并发标记,并发冲突重试机制,时间戳与行版本,使用 TimestampAttribute 特性和 IsRowVersion 方法将字节数组属性设置为并发标记。
第04期-模型映射配置
在非 ASP.NET Core 环境中使用容器依赖注入 Entity Framework Core 上下文,读取配置文件,通过设计时上下文工厂实现模型迁移,理解默认约定,通过 Data Annotations 数据注解和 Fluent API 链式方法配置模型,动态生成数据库值,设置必填或可选,最大长度限制。
第03期-上下文与模型映射配置
配置 DbContext 上下文,DbContextOptionsBuilder 与 DbContextOptions,基于构造函数配置,重写 OnConfiguring 方法配置,依赖注入方式,用于测试的 SQLite 内存模式和 InMemory 内存提供程序。理解 EF Core 的默认约定,并通过 Data Annotations 数据注解和 Fluent API 链式方法配置模型,忽略不必要的类型,忽略不必要的属性,数据库主键,复合主键。
第02期-基础配置与应用
使用 Entity Framework Core 访问 SQL Server 数据库,配置连接字符串,在容器中依赖注入上下文,记录数据库操作日志,理解 Code-First 与 Database-First 区别,对现有数据库进行反向工程,使用工具生成基于现有数据库的上下文和模型类,在原始版本的 .NET Framework 平台上使用 EF Core 框架,理解多平台 .NET Standard 标准库。
第01期-数据访问技术入门
理解 Entity Framework Core 数据访问技术,轻量化、可扩展、开源和跨平台,数据库提供程序与多数据库引擎支持,创建一个 .NET Core 控制台应用,该应用使用 EF Core 对 SQLite 数据库执行数据访问,通过迁移工具基于模型创建数据库,使用 EF Core 构建 ASP.NET Core MVC 应用程序,可用 SQLiteStudio 管理数据库。
第105期-使用连接服务生成 API 客户端
连接服务是 Visual Studio 中的一个工具集合,可帮助你将应用程序快速连接到指定的远程服务,使用 OpenAPI 终结点生成 HTTP API 客户端,定制 OpenAPI 生成的方法名和代理类名,一键更新生成的代理类,使用代理类高效优雅的调用 Web API 接口。
第104期-ASP.NET Core 6.0 中的改进与升级
最小 API 最小托管模型 ,最小 API 和控制器 API 的区别,关于 SignalR 改进,使用源代码生成器的 Razor 编译器, 支持使用 IAsyncDisposable 释放资源,配置 HTTP/3 提高性能,日志记录改进,使用热重载快速更新正在运行的应用程序,使用顶级语句最小化应用程序所需的代码,默认启用可为空的引用类型,隐式命名空间全局引用,使用 HTTP 日志中间件快速记录请求响应日志,启用 Redis 分析会话,使用卷影复制。
第103期-在 WebAPI 中使用 PATCH 处理请求
理解 REST API 中的 URL 设计规范, 深入理解 PUT 和 PATCH 请求的区别,使用 PUT 更新整个实体资源,使用 PATCH 更新资源的部分字段,学习 JSON Patch 协议规范和相关操作,在 Web API 中使用微软官方提供 Patch 库处理请求,将 Patch 的更改用 EF Core 持久化保存到数据库,在 OpenAPI 帮助文档中展示 Patch 示例并运行例程。
第102期-关于 ASP.NET Core 5 改进升级
支持 UTC 时间模型绑定,记录类型模型绑定,默认开启 OpenAPI 规范文档生成,提升 gRPC 性能,支持为 SignalR 集线器设置筛选器,改进 Kestrel 的配置和性能,优化 HTTP2 协议,缩减 Docker 容器镜像,允许匿名访问终结点,在 HttpContext 上提供 JSON 读取和写入的扩展方法,控制 Startup 类激活,使用 Watch 监视代码变更,修改代码后浏览器自动刷新,提供 JSON 格式控制台日志记录器。
第101期-关于 .NET 5.0 改进与升级
理解 .NET 5 版本规范,将项目从 .NET Core 升级到 .NET 5 版本,理解 .NET Framework、.NET Core、.NET Standard 和 .NET 5 版本之间的区别与联系,关于工作流 WF 和 分布式 WCF 跨平台替代方案,最新 C# 9.0 语言特性,提供源码生成器在编译阶段动态注入代码,了解 Roslyn 分析器,全方位性能提升,内置 JSON 序列化库提供更好的性能和功能,未来 .NET 版本发布时间和路线图,理解最新 .NET 的生态系统和愿景。
第100期-使用托管服务实现后台任务
使用 Worker 编写后台自动任务,关于 IHostedService 接口与 BackgroundService 抽象类,构建自宿主 Host 环境,在依赖容器中注入后台任务,在 Docker 容器中部署后台任务,在 Windows 服务中托管后台任务,使用 PowerShell 和 SC 命令管理 Windows 服务,使用开源的任务调度器框架。
第99期-对WebAPI接口进行版本控制
业务需求变化,需要对 API 进行修改和版本升级,这些升级不能破坏其原始的 API 协定,并且同时运行旧版和新版的服务协定,因此,有必要制定服务版本控制策略,微软开源库提供整套版本控制解决方案,实战演练,在 ASP.NET Core 中控制 Web API 和 OData 接口的版本,版本约定相关配置,基于 OpenAPI 生成具有版本控制的 Swagger 帮助文档,参阅微软官方帮助文档。
第98期-使用OData开放数据协议
理解微软开放数据协议,适用于 ASP.NET Core Web API 的 OData 支持库,注册 OData 相关服务,配置中间件,创建 OData 控制器,使用 OData 条件查询资源,实体集合,主键查询,选择查询,展开查询,过滤查询,内置过滤操作符,使用工具生成客户端代理,使用代理类消费 OData 数据,官方提供的在线示例。
第97期-使用WebAPI约定和分析器
关于 WebAPI 设计准则与最佳实践,使用 [Produces]、[ProducesResponseType]、[ProducesErrorResponseType] 和 [ProducesDefaultResponseType] 标记 WebAPI 响应,使用 OpenAPI 分析器简化操作约定流程,使用微软内置的 DefaultApiConventions 约定器,实战演练,创建并使用自定义的约定模板。
第96期-使用NSwag生成WebAPI帮助文档
使用 NSwag 工具生成基于 Swagger 规范和符合 OpenAPI 标准的帮助文档,使用 SwaggerUI 和 ReDocUI 界面,理解 NSwag 体系结构和支持的工具链,使用 Visual Studio 添加 OpenAPI 服务引用,在构建阶段生成 C# 客户端代理类和基于 TypeScript 的代理类,可用微软 DocFX 工具基于 OpenAPI 生成离线帮助文档。
第95期-使用OpenAPI生成帮助文档
关于 Swagger 与 OpenAPI 规范,使用 Swashbuckle 开源库生成 WebAPI 帮助文档,微软内置 ApiExplorer 元数据层,配置 Swagger 提供的 JSON 端点,元数据特性约定,包括 XML 注释中的描述,生成多版本文档,省略过时的内容,接口分组与排序,使用过滤器扩展生成器,配置身份认证与授权,启用 OAuth 流程,注入自定义 CSS 样式,自定义模板,启用元数据特性,使用 ReDoc 界面,第三方开源界面主题。
第94期-处理WebAPI中的错误异常
微软内置的开发者异常页面,自定义异常处理程序,开发环境与生产环境下的异常处理,返回符合 RFC7807 格式标准的错误消息,使用过滤器处理异常,模型验证失败时的错误响应,定制模型验证错误响应工厂,客户端错误响应返回, 自定义 ProblemDetailsFactory 工厂,生成 ProblemDetails 和 ValidationProblemDetails 实例,客户端错误码映射。
第93期-关于WebAPI响应数据的格式
特定格式的操作结果,认识 JsonResult 与 ContentResult 的区别,理解 HTTP 协议中的 Content-Type 和 Accept 标头,数据格式的内容协商,配置格式化程序,内置 JSON 与 XML 格式化程序,支持第三方格式化程序,使用 [Produces] 限定输出格式,排除内置的格式化程序,使用 [FormatFilter] 过滤器通过 URL 参数协商数据格式,通过示例实战演练,自定义输入格式化器和输出格式化器。
第92期-理解WebAPI控制器返回类型
理解 Web API 控制器操作的返回类型,使用特定类型返回值,同步操作与异步操作,实现异步可提高吞吐量,集合 IEnumerable<T> 与 IAsyncEnumerable<T> 的区别,关于 IActionResult 接口与 ActionResult<T> 类,使用 [ProducesResponseType] 特性为帮助文档提供更多的描述信息。
第91期-深入WebAPI复杂模型绑定
简单类型与复杂类型的模型绑定机制,关于参数绑定中的前缀约定,自定义前缀,使用 [BindRequired]、[BindNever] 和 [Bind] 约束绑定,自定义对象模型绑定,集合类型模型绑定,字典类型模型绑定,特殊数据类型模型绑定,使用转换器自定义模型绑定,从模型绑定中排除指定类型,手动模型绑定与验证,自定义模型绑定器。
第90期-学习WebAPI模型的基本绑定
基于属性与参数的模型绑定,使用 [BindProperty] 和 [BindProperties] 绑定属性值,参数绑定原理,理解 [FromBody]、[FromForm]、[FromHeader]、[FromQuery]、[FromRoute] 和 [FromServices] 特性,扩展模型绑定系统,编写并注册自定义值提供程序,内置默认值模型绑定规则,类型转换错误处理机制,基本类型绑定。
第89期-理解WebAPI控制器与验证机制
创建 API 项目, 理解 Controller 与 ControllerBase 的区别,了解 MVC 中提供的 Attribute 特性,理解 ApiController 特性的作用,路由配置,内置自动模型验证过滤器,响应符合 RFC 规范的错误消息,禁用模型自动验证,将 HTTP 错误状态代码转换为符合 RFC 规范的错误消息,禁用 HTTP 状态码转换,设置错误代码映射。
第88期-学习gRPC指南与示例代码
谷歌 ProtoBuf 语言规范,跨平台 gRPC 技术栈,通道配置,使用服务引用工具简化配置,配置 TLS 加密传输,异常封送,数据包大小限制,接口版本控制与向后兼容性,健康状况监测,使用反射协议动态调用服务,单元测试与功能测试,在客户端显示服务端处理进度,在浏览器中使用代理调用服务,支持分布式性能收集器,关于 Blazor 框架与 gRPC 服务的深度集成。
第87期-对比gRPC服务与HttpApi接口
多方面对比 gRPC 服务与 Web API 接口技术选型,协定,协议,有效载荷,规范性,流式传输,浏览器支持,安全性和客户端代码生成,关于 gRPC的优点与缺点,理解 gRPC 服务的应用场景和技术选型,其它技术备用方案推荐。
第86期-在gRPC中使用数字证书身份认证
数字证书与证书颁发机构,查看证书管理器,学习自签名证书创建工具,理解数字证书认证流程,编写 gRPC 服务,在服务端配置证书认证方式与授权条件,在客户端通道中附加数字证书,服务端获取客户端数字证书的元信息。
第85期-gRPC与IdentityServer集成
IdentityServer 框架是基于 ASP.NET Core 构建的 OpenID Connect 和 OAuth 2.0 框架,可与 gRPC 集成实现认证与授权,通过示例实战演练,构建认证授权服务,编写 gRPC 服务,使用客户端获取令牌并请求 gRPC 服务完成认证授权,分别配置基于角色和策略的授权机制,客户端令牌构造方式。
第84期-gRPC中的身份认证与授权
身份认证与授权原理,基于令牌的身份认证,获取当前服务请求的用户标识,通过订票业务示例代码,学习并实现 JWT 令牌颁发服务,配置 JWT 和 Bearer 身份认证,实现 gRPC 服务授权,客户端通过凭证获取令牌,使用令牌请求 gRPC 服务,关于 JWT 令牌的对称加密与非对称加密算法。
第83期-在gRPC中使用拦截器
拦截器的工作原理与用途,横切关注点,编写示例代码实践拦截器用法,创建客户端拦截器,配置并使用客户端拦截器,创建服务端拦截器,配置并使用服务端拦截器,实现并重写拦截器相关的方法,配置全局拦截器和局部拦截器,将拦截器注册到依赖注入容器。
第82期-使用客户端调用gRPC服务
使用长连接通道创建客户端,将 gRPC 客户端注册到依赖注入容器,在相关服务中使用构造函数注入客户端实例,通过示例代码学习客户端与服务端通信的多种方式,最简单的一元调用方式,服务端写流客户端读流方式,客户端写流服务端读流方式,双向读写流通信方式。
第81期-关于gRPC的相关配置
配置 TLS 数字证书和端口,实现安全通信,集成依赖注入容器,从 gRPC 服务中解析 HttpContext 实例,服务端与客户端配置选项,限制收发消息大小,向客户端封送异常详情,压缩算法与级别设置,请求拦截器配置,设置 HttpClient 行为,日志工厂配置,数字证书配置,服务端与客户端日志记录配置。
第80期-使用gRPC实现远程过程调用
理解 RPC 远程过程调用框架,学习 gRPC 技术原理,与语言无关的高性能远程过程调用框架,关于 gRPC 的技术优点和适用场景,通过编写示例实践,分别创建服务端和客户端,使用 Visual Studio 提供的模板创建并管理 gRPC 服务,定义通信协议,生成客户端代理类,在客户端调用远程 gRPC 服务方法,添加文件链接与服务连接。
第79期-使用变更令牌检测目标变更
变更令牌用于跟踪状态变化的目标对象,从而传播已发生更改的通知,理解 IChangeToken 接口与 ChangeToken 静态类,获取变更令牌与注册变更回调,当配置文件更改时自动加载最新配置,使用 IFileProvider 接口的 Watch 方法监视文件更改,当缓存数据项变更时自动过期,使用 CompositeChangeToken 类可同时组合多个变更令牌,实现自己的 IChangeToken 接口,自定义对象属性变更令牌。
第78期-监听文件系统更改与事件通知
侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件,编写简单的控制台演示程序,并学习 FileSystemWatcher 类的使用技巧,通过计算与比较文件的哈希值,解决文件系统变更事件重复执行多次的问题,读取并打印文件内容,理解重试机制中的指数退避算法。
第77期-使用文件变化监控程序开发应用
使用微软提供的 dotnet watch 工具监控项目文件更改,当文件变更时自动触发项目编译、测试执行和持续部署,原始命令与监视命令的对应关系,学习 glob 模式匹配,自定义要监视的文件列表,从要监视的文件列表中排除指定的文件,自定义监视项目文件可实现同时监视多个项目,开源代码与内部实现原理。
第76期-从 ASP.NET Core 2.2 迁移到 3.0 版本
环境准备与先决条件,更新项目文件,更新目标框架,删除过时的包引用,将使用的第三方 NuGet 包升级到最新版,移除 Startup 启动类中过时的内容,使用终结点方式路由,推荐微软内置 JSON 处理库,可回退至第三方 Json.NET 处理库,可配置为不带终结点 MVC 路由,使用 HostBuilder 替换 WebHostBuilder 类。
第75期-ASP.NET Core 3.0 新增功能
介绍 ASP.NET Core 3.0 和 3.1 中的新增功能与更改,使用 Blazor 开发基于 WebAssembly 客户端应用,关于 Blazor 的客户端与服务端寄宿方式,新增 gRPC 远程过程调用支持,可替代 WCF 技术,改进 SignalR 实时通信框架,支持断开重连事件,内置全新的 JSON 序列化库,全新的泛型主机,支持 HTTP 2.0 协议,使用终结点路由,改进IIS错误报告,优化并提升性能。
第74期-使用TypeScript编写脚本
TypeScript 是 JavaScript 类型的超集,在 ASP.NET Core 中使用 TypeScript 提高编写脚本的效率,理解 TypeScript 的特点,使用 Visual Studio 将 TS 文件编译为符合 ECMAScript 标准的 JS 文件,通过几个示例认识 TypeScript 面向对象开发的高级功能,使用 TypeScript 配置文件设置编译器行为,了解 ECMAScript、JavaScript 和 TypeScript 之间的区别与联系。
第73期-编译压缩合并与前端自动化构建
使用 WebCompiler 工具将 SASS 和 LESS 编译为 CSS 文件,使用 BundlerMinifier 工具合并压缩 CSS 和 JS 文件,使用配置文件改变工具的默认行为,将构建工具与微软 MSBuild 深度集成,在 Visual Studio 生成阶段完成前端自动化、预编译、合并和压缩,在任务运行程序资源管理器中管理并跟踪任务,将任务绑定至不同的阶段,实现灵活便捷的前端自动化构建。
第72期-使用LibMan工具管理前端库
微软 LibMan 管理器是一个轻量型的客户端库获取工具,使用该工具可从文件系统或公共 CDN 下载并管理前端库,还可灵活选择要提的文件,并将其置于项目中的任意位置,最新 Visual Studio 已内置 LibMan 支持,支持添加、更新、卸载和还原前端库,也可与 MSBuild 深度集成,在项目的生成阶段自动还原前端库。
第71期-第三方健康状况检查开源库
健康状况检查 BeatPulse 开源库学习,标准配置,跟踪器,访问认证,可视化 UI 框架,使用配置文件,了解 Prometheus 集群系统监控开源框架,在 Docker 容器中运行 UI 框架,配置 WebHook 回调钩子。在微软 ASP.NET Core 框架中集成 BeatPulse 健康状况服务实现,配置可视化界面查看监控状态。
第70期-编写健康状况检查组件与发布器
开发自己的内存健康状况检查服务组件,内存健康状况检查服务设置选项,提供 IHealthChecksBuilder 扩展方法,运行状况检查通知发布器,实现 IHealthCheckPublisher 接口,了解 WebHook 回调钩子,发布器的启动延迟时间、执行间隔、条件筛选和超时时间设置,在依赖注入容器中注册发布器。
第69期-数据上下文探测与后台服务
关于 Entity Framework Core DbContext 上下文状况探测,使用编码方式创建与删除数据库,实现 IHealthCheck 接口实现状况检查服务,使用 IHostedService 实现后台自动任务,在自动任务中变更健康检查服务的状态,了解 Kubernetes 中关于健康状况探测的配置。
第68期-运行状况检查选项配置
运行状况检查选项设置,检查服务分组,使用 Tags 和 Lambda 表达式筛选检查服务,自定义 HTTP 状态代码映射,设置响应缓存,自定义接口内容输出,使用 BeatPulse 提供的开源库检查 SqlServer 数据库引擎的连接状态。
第67期-基础服务运行健康状况检查
ASP.NET Core 提供的健康状况检查中间件和库,用于报告应用程序基础结构组件的运行状况,引用健康检查相关程序包,第三方实现 BeatPulse 开源库,实现 IHealthCheck 接口创建自定义的健康状态检查服务,在依赖注入容器中注册运行状况检查服务,运行状况检查中间件配置,监听地址与端口设置。
第66期-机密数据与COOKIE策略
在 ASP.NET Core 应用中安全存储开发机密,使用命令行工具管理用户机密,启用机密存储,在 Visual Studio 中管理用户机密,在应用中读取机密配置文件,将机密配置信息映射到 POCO 实体对象,动态生成安全的数据库连接字符串。配置 Cookie 策略中间件, 监控 Cookie 变更通知事件,了解 GDPR 欧盟通用数据保护条例。
第65期-数据保护配置与可扩展性
配置数据保护器,分别在 Azure 密钥保管库、分布式 Redis 缓存和 EF Core 中存储密钥,配置生成密钥的有效期,加密算法配置,计算机范围的策略配置,非依赖注入场景下的数据保护提供者,数据保护系统的扩展性,使用第三方开源库加密 ASP.NET Core 参数,学习微软数据保护示例代码。
第64期-数据保护与密码哈希
学习 ASP.NET Core 中的数据保护方案,使用数据保护器加密与解密数据,保护器的层级结构,使用 PBKDF2 算法生成哈希密码,使用 PasswordHasher 密码哈希算法类,具有生命周期的数据保护器,使用找回丢失的数据, 短暂性数据保护器。
第63期-非对称加密&数字签名&数字证书
学习非对称加密算法,关于 RSA 算法的非对称加密与解密,推荐基于 .NET Core 平台的加密解密开源库,数字签名的基本原理,数字证书与证书颁发机构,关于 HTTPS 协议的基本原理,程序集签名,可用 MakeCert 工具创建数字证书,推荐《微软.NET程序的加密与解密》和《.NET安全揭秘》图书,微软安全系列算法体系结构图。
第62期-编码&哈希摘要&对称加密
编码与解码,字符集与算法,关于 Unicode 字符集,理解 UTF-8 编码方式,使用 Base64 编码与解码,哈希散列摘要算法,理解 MD5 算法 和 SHA 系列算法,使用 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 哈希算法,学习并使用具有密钥的 HMAC 哈希算法,理解单密钥对称加密算法,学习 AES、RC2、DES、TripleDES 和 Rijndael 对称加密算法。
第61期-应用程序安全性
关于 ASP.NET Core 应用程序的安全性,客户端 IP 地址白名单访问限制,防止 URL 重定向攻击, 防止跨站脚本注入 XSS 攻击,学会使用 HTML 编码器、 JavaScript 编码器 和 URL 编码器,防止跨站点请求伪造 XSRF 或 CSRF 攻击,基于 Antiforgery 防伪标记的生成与验证配置。
第60期-HTTPS协议安全访问配置
理解 HTTP 协议、HTTPS 协议和 HSTS 协议,了解 SSL 与 SSL 协议,在 ASP.NET Core 中使用 RequireHttpsAttribute 将部分请求重定向到 HTTPS 请求,使用 HTTPS 重定向中间件将所有 HTTP 请求重定向到 HTTPS 请求,反向代理转接头与重定向注意事项,使用 HSTS 中间件向客户端浏览器发送基于严格传输安全性协议的 HSTS 标头,配置 HTTPS 端口与重定向状态码,关于 HSTS 预加载列表说明,配置 HSTS 中间件,证书配置。
第59期-CORS与JSONP跨域请求
跨域请求,跨域资源共享,理解 CORS 运行原理,简单请求与预检请求,浏览器同源策略,在 ASP.NET Core 中使用 CORS 中间件实现跨域请求,使用中间件实现跨域请求,在 MVC 中使用筛选器实现跨域请求,跨域策略详细配置,理解 JSONP 技术原理,在 ASP.NET Core 中实现 JSONP 跨域请求。
第58期-基于资源的授权与动态授权
基于资源的授权方式,定义资源授权条件,实现资源授权处理程序,调用授权服务处理授权,基于角色与权限的动态授权,自定义授权筛选器,在视图中使用授权服务接口。
第57期-授权机制的内部工作原理
理解 ASP.NET Core MVC 中的授权扩展,基于认证方案的授权,授权应用程序模型提供者,授权过滤器,策略计算器,授权服务,授权策略提供者,授权处理程序上下文与工厂,授权处理程序提供者,授权计算器,理解授权策略的执行过程,编写自定义授权特性标记,实现自定义授权策略提供者,基于 Razor 页面的授权约定。
第56期-基于策略的授权
理解授权的过程与原理,在 ASP.NET Core 中使用授权组件,简单授权,基于角色的授权,基于声明的授权,基于策略的授权,授权策略与授权条件,授权机制的内部工作原理,自定义授权处理程序,多条件授权处理程序,使用 Func 委托实现授权策略,授权处理程序的返回结果约定。
第55期-OAuth与OIDC协议
理解 OAuth 2.0 与 OpenID Connect 协议的区别,在 ASP.NET Core 中使用 OAuth 处理程序进行身份认证,使用 OpenID Connect 处理程序进行身份认证,分析 OIDC 协议获取访问令牌和用户身份信息的详细流程。
第54期-OpenID与OAuth协议
理解 OpenID 认证协议,理解 OAuth 2.0 授权协议,通过不同的授权方式获取访问令牌,OpenID Connect 认证与授权协议,在 ASP.NET Core 中使用 OAuth 授权协议集成第三方登录方式,分析授权码模式获取访问令牌的业务流程。
第53期-SAML与WS联合身份认证
参数化 JWT 访问令牌,基于 OSS 单点登录的开源身份验证提供程序,理解 SAML 安全断言标记语言,在 .NET Core 中生成并校验 SAML 格式的令牌,阿里云和腾讯云提供的免费联合身份认证,在 ASP.NET Core 中集成微软 WS-Federation 联合身份认证方式。
第52期-JwtBearer身份认证方案
编写 JWT 令牌签发服务,在 ASP.NET Core 中使用 JwtBearer 身份认证方案验证令牌,在 APP 客户端 和 Web 客户端中申请 JWT 令牌,并使用 Bearer 认证方式,通过 JWT 令牌访问受保护数据,对称和非对称算法签名技术,生成 RSA 公钥和私钥,使用私钥签发令牌,通过公钥验证令牌,基于角色声明的授权。
第51期-身份认证方式与令牌
基于 HTTP 协议的身份认证规范, Digest 摘要身份认证,Windows 身份认证,Kerberos 和 NTLM 协议,Bearer 身份认证,在 IIS 中配置身份认证方案,在应用程序中提供访问凭证,基于 JWT 规范的访问令牌,在 .NET Core 中生成并校验 JWT 格式的令牌。
第50期-基于HTTP协议的认证方案
基于 Cookie 的身份认证原理回顾,理解 HTTP 协议栈提供的通用认证框架,学习 HTTP 基本身份认证,根据微软设计规范,编写自己的认证框架,在 ASP.NET Core 中实现 HTTP 基本身份认证方案,默认常量,参数选项,身份认证处理器,提供与微软一致的扩展方法,编写可扩展的认证事件,在其它应用中使用自己开发的认证方案。
第49期-身份认证原理与Identity扩展
理解 ASP.NET Core 身份认证系统的核心原理,分析微软身份认证系统的源代码。使用 IdentityManager 管理 Identity 数据结构,编写自己的后台管理界面,手机号绑定与验证,2AF双重身份认证,基于 TOTP 算法的时间一次性密码,二维码生成方案。
第48期-身份认证的工作原理
基于 Cookie 认证的参数配置,使用 Cookie 策略中间件,订阅 Cookie 的添加与移除事件,票据的过期与缓存。ASP.NET Core 身份认证的工作原理,通过 HttpContext 的扩展方法进行登录、验证、退出、质询和拒绝,认证服务接口,认证方式提供者,认证处理程序提供者,自定义认证处理程序,并通过依赖注入扩展身份认证方案。
第47期-基于声明的身份认证与授权
理解基于声明的身份认证与授权,理解身份认证中的 Claims、ClaimsIdentity 和 ClaimsPrincipal 模型,生成 TOKEN 令牌,使用中间件验证令牌,用 Cookie 方案实现登录和注销功能,在 MVC 中使用基于角色的授权方式。
第46期-Identity框架相关配置
短信与邮件发送器配置,理解基于 ASP.NET Core MVC 控制器的 Identity 框架,双重 2AF 身份认证,理解认证与授权流程,深入 Identity 框架配置,更改声明类型,账号锁定机制,密码安全性,登录策略,TOKEN 校验,用户名安全性和 Cookie 相关配置,基于 OAuth 2.0 协议的第三方身份验证提供程序,集成腾讯 QQ 和 微信身份认证。
第45期-Identity身份认证框架
认证与授权的区别,基于声明的身份认证,在 ASP.NET Core 中使用内置的 Identity 框架,使用基架快速创建身份认证系统,自定义表结构与实体关系,理解 Identity 的体系结构,扩展数据访问层,自定义身份认证系统界面。
第44期-响应缓存与响应压缩
理解HTTP缓存规范,在 ASP.NET Core 中配置响应缓存,设置缓存策略,在中间件中缓存响应,缓存部分页面,基于内存和分布式缓存的标记帮助程序,静态文件缓存配置,了解 CDN 缓存的优势。响应内容压缩中间件,配置 Gizp 和 Brotli 压缩算法,编写自定义压缩算法提供者,基于反向代理的压缩配置。
第43期-内存缓存与分布式缓存
缓存的概念与优点,基于内存缓存的配置,缓存项设置与获取、过期事件订阅、绝对过期、滑动过期和缓存依赖项,分布式缓存的配置方法,扩展分布式缓存接口,基于 Redis 的分布式缓存实现,安装 Redis 服务,配置端口和密码,基于 SQL Server 的分布式缓存实现,基于内存的分布式缓存实现,了解缓存雪崩与缓存穿透。
第42期-代理转接头与发布配置
理解反向代理转接头,关于 X-Forwarded-For、X-Forwarded-Proto 和 X-Forwarded-Host 转接头,设置可信任的代理服务器地址,负载均衡及其配置。项目生成与发布流程,排除发布文件,包含发布文件,在发布前后运行自动任务,了解持续集成与交付,如何实施 DevOps 模型。使用全新的 LibMan 客户端库管理器。
第41期-在Docker容器中托管应用
容器技术简介,学习 Docker 体系结构,开发环境搭建,入门教程推荐,创建 ASP.NET Core 应用,使用 Visual Studio 自动生成映像,通过镜映像启动容器,私有仓库与公有仓库,将映像发布到远程仓库,编写 Docker Compose 文件,使用 Docker 编排工具在 Linux 平台上快速构建基于 SQL Server on Linux 的容器和 Web 容器, 了解 Swarm 集群、使用 Kubernetes 管理集群,认识微服务。
第40期-使用Apache在Linux平台上托管应用
使用 Putty 通过 SSH 公钥连接 Linux 服务器,在 CentOS 上安装 .NET Core 运行时,搭建 FTP 服务器,发布文件到服务器,安装 Apache 服务,配置服务器,转发请求代理与负载均衡配置,绑定域名,配置 SSL 证书,创建后台监控服务,配置防火墙。
第39期-使用Nginx在Linux平台上托管应用
使用 Putty 远程管理 Linux 服务器,在 Ubuntu 上安装 .NET Core 运行时,通过 PSCP 上传文件到服务器,安装 Nginx 服务,配置反向代理,绑定域名,配置 SSL 证书,创建后台监控服务,安装 FTP 服务,通过 FTP 方式发布应用,编写脚本,实现一键自动化发布。
第38期-在Windows平台上发布应用
在 Windows 平台上发布 ASP.NET Core 应用,托管与部署的步骤,独立部署和框架依赖方式,安装 IIS 服务器,在服务器上安装 .NET Core 运行时,配置网站,理解发布选项,配置文件系统部署,配置 Web Deploy 方式部署,配置 FTP 方式部署,一键将应用发布到微软云应用服务或虚拟机,免费获取 SSL 证书,配置 HTTPS 协议支持,在 Windows 服务中托管应用。
第37期-性能负载测试与高级调试
性能测试,负载测试,基于代码的 UI 测试,关于 Windows 和 Linux 平台上的调试器与内存转储工具,抓取服务器内存转储文件,使用 WinDbg 在本地调试程序,理解 CLR 对象的内存形态,通过转储文件分析服务器内存和 CPU 的使用情况,介绍性能计数器和性能探测器。
第36期-集成测试&远程调试&源码跟踪
在 ASP.NET Core 中测试控制器逻辑,为控制器编写单元测试,单元测试中的 Fake、Stub 和 Mock 术语,使用 Moq 框架进行单元测试,轻量级集成测试,了解 Selenium、Html Agility Pack 和 AngleSharp 框架,远程调试服务器程序,源码跟踪调试配置。
第35期-单元测试
认识单元测试,单元测试的最佳做法,使用 xUnit 进行单元测试,使用 MSTest 进行单元测试,使用 NUnit 进行单元测试,三种测试框架的最佳实践,单元测试管理器,使用 Live Unit Testing 实时显示测试结果,查看代码测试覆盖率。
第34期-构建WebAPI接口
使用 ASP.NET Core 构建 Web API 接口,控制器约定,操作返回类型,返回特定类型,同步操作,异步操作,使用 EF Core 访问 MySQL 数据库,为 Web API 提供数据,使用基于 Swagger 规范的 Swashbuckle 框架生成 Web API 帮助文档,特定格式的操作结果,内容协商机制,配置格式化器,基于 URL 格式化参数, 自定义格式化程序。
第33期-筛选器&部件&功能
筛选器作用域与执行顺序,重写默认顺序,取消与短路筛选器,筛选器中的依赖注入,授权筛选器,资源筛选器,操作筛选器,异常筛选器,结果筛选器,在筛选器管道中使用中间件。应用程序部件,程序集加载过程,自定义功能提供程序,显示可用功能。
第32期-控制器&约定&筛选器
ASP.NET Core 中的文件上传,使用模型绑定上传小文件,使用流式处理上传大文件,控制器中的依赖注入,构造函数注入,基于 FromServices 的注入方式,配置设置注入。应用程序模型,提供程序,自定义约定。筛选器的工作原理,同步筛选器与异步筛选器,IFilterFactory 筛选器工厂和内置筛选器特性。
第31期-MVC控制器
MVC中的控制器,关于 Action 操作定义,返回响应,传统路由,多个路由,属性路由,路由名称,合并路由,对属性路由排序,路由模板,自定义路由属性,URL生成,区域分区,自定义路由约束。
第30期-视图布局
视图布局、指定布局模板、导入共享指令、标记帮助程序、自定义标记帮助程序、部分视图、部分视图的申明、引用和数据传递、视图组件复用原理和自定义视图组件。
第29期-模型验证与视图语法
使用 FluentValidation 进行模型验证,扩展验证框架,支持本地化错误消息提示。ASP.NET Core MVC 中的视图语法与指令,控制器指定视图,向视图传递数据,学习 Razor 语法,视图预编译设置。
第28期-模型验证
模型验证简介,验证属性,验证错误消息的多语言支持,通过 ModelState.IsValid 检查模型验证结果,使用 TryValidateModel 手动验证,实现 IValidatableObject 接口自定义验证规则,继承 ValidationAttribute 实现自定义验证属性,深入客户端验证,实现 IClientModelValidator 接口向客户端提供验证元数据信息,向动态表单添加验证适配器,远程验证,使用第三方库让模型验证体验更好。
第27期-模型绑定
模型绑定的工作原理,基本类型和复杂类型绑定,IFormFile文件上传,[BindRequired]、[BindNever]、[FromHeader]、[FromQuery]、[FromRoute]、[FromForm]、[FromServices]、[FromBody] 和 [ModelBinder] 特性的作用,通过特性自定义模型绑定行为,自定义模型绑定,实现 IModelBinder 与 IModelBinderProvider 接口,绑定请求正文中的带格式的数据。
第26期-Razor页面与模型
Razor 页面布局、部分视图、模板和标记帮助程序,页面跳转,自定义路由,自定义页面存放目录,页面 Filter 过滤器,基于 .NET 标准类库与 .NET Core 类库区别,基于 Razor 页面的类库,通过 IFormFile 上传文件。
第25期-Razor页面与模型
理解 Razor 页面引擎,在 ASP.NET Core 中使用 Razor 页面模型,关于 @page 指令的作用,引入 PageModel 页面模型,页面目录结构,通过一个简单的增删改查示例学习 Razor 页面模型。
第24期-SignalR实时通信与推送技术
在 SignalR 中使用 JSON 协议和 MessagePack 协议,流式数据处理与推送,演示将超大文件通过数据流的方式推送至客户端,身份验证和授权,编写一个基于 Cookie 认证的 SignalR 服务端。
第23期-SignalR实时通信与推送技术
深入讲解 SignalR 中的 Hub 集线器,连接、用户和分组,连接与断开事件,分别向指定连接、用户和分组推送消息,在 MVC 控制器中通过 IHubContext 接口注入 Hub 集线器,在中间件中使用 Hub 集线器,使用 IUserIdProvider 接口自定义用户编号提供者,配置 CORS 跨域策略,基于 SignalR 推送技术的 JavaScript 客户端和 .NET 客户端。
第22期-实时通信与推送技术
实时通信方案介绍,短轮询,长轮询,服务器发送事件(Server-Sent Events) 和 WebSocket 通信方案,在 ASP.NET Core 中使用 WebSocket 技术,实时通信 SignalR 技术解决方案,集线器,使用 SignalR 技术实现一个简单的群发聊天室。
第21期-请求第三方WebAPI接口
HttpClient 客户端的基本用法,命名客户端,类型化客户端,在 ASP.NET Core 中集成 Refit 框架,通过 DelegatingHandler 实现处理程序中间件,集成 Polly 框架,提供全面恢复和临时故障处理方案。
第20期-全球化&本地化&多语言
自定义语言文化提供者,使用路由数据提供语言文化,定义过滤器中间件,资源文件的命名与组织结构,区域性回退行为,通过特性依赖注入服务,Portable Object 可移植对象本地化,理解 PO 文件格式,使用 PO 文件编辑器,通过 PO 组件实现 PO 文件的本地化与多语言。
第19期-全球化&本地化&多语言
理解全球化与本地化,将内容本地化,使用工厂创建共享资源文件,视图本地化,模型验证本地化,资源文件与本地化的具体配置,本地化依赖注入,关于微软内置的语言文化提供者的具体使用方法,通过写 Cookie 的方式设置语言文化。
第18期-应用状态与会话
HTTP 是无状态的协议,深入理解 Cookie 存储机制,深入 Session 状态维护,分布式缓存 Session 状态,使用 JSON 和 Protobuf 扩展 Session 序列化方案,使用 TempData 传递数据,使用查询字符串和隐藏域传数据,使用 HttpContext.Items 在中间件之间通信,使用缓存存储和检索数据,使用依赖注入存储对象。
第17期-主机与服务器配置
ASP.NET Core 中的两种服务器实现,基于 Kestrel 和 HTTP.sys 的服务器配置,WEB主机和通用主机的区别,分别使用 WebHostBuilder 和 HostBuilder 构建服务主机,服务器的基本配置。
第16期-预编译与文件提供程序
理解 CSS 预编译,了解 LESS 和 SASS 技术,在 Visual Studio 中使用 LESS 和 SASS,使用 Gulp 编写自动化预编译任务。认识文件系统,讲解 IFileProvider 文件提供程序,使用 IFileInfo 和 IDirectoryContents 访问文件目录内容,使用字节流读取文件,使用 PhysicalFileProvider、EmbeddedFileProvider 和 CompositeFileProvider 构建文件访问程序,文件路径统配模式。
第15期-客户端开发技术
编写 Grunt 自动化任务,包管理方案,使用 Bower 管理前端包,使用 Bootstrap 构建响应式站点,针对静态文件的捆绑和缩小,使用 BrowserLink 浏览器链接,在 .NET 中调用 Node.js 模块。
第14期-日志异常与前端构建
在 ASP.NET Core 中使用日志框架,使用 LoggerMessage 类提高日志记录性能,处理错误异常,开发人员异常页,配置自定义异常处理页,配置状态代码页,Node.js框架简介,在 Visual Studio 中安装 Node 模块,使用 Gulp 前端构建工具,合并与压缩文件,编写前端自动化任务,使用任务运行资源管理器管理并设置任务。
第13期-日志记录与分卷
将日志记录输出,使用微软内置的日志提供程序,添加日志提供程序,日志类别,日志级别,事件编号,消息模板,记录异常,日志筛选器,日志作用域,日志配置文件,使用第三方提供程序 NLog 记录日志,日志配置与智能提示,日志分卷。
第12期-配置选项与配置系统扩展
基于选项的配置,通过委托配置简单选项,自选项配置,在控制器和视图中注入选项,基于名称的选项配置,创建 Entity Framework 扩展配置提供程序,将配置存储到数据库中。
第11期-使用多环境与配置文件
系统环境变量,关于开发、测试和生产环境的配置,启动类和配置方法的约定。默认配置文件注入与读取,自定义 JSON 和 XML 配置文件,指定环境配置文件,添加内存字典配置,读取配置值与配置节的技巧。
第10期-URL重定向与重写
使用 URL 重写中间件,理解重定向与重写,永久重定向与临时重定向,简单重定向与重写设置,通过配置文件加载 ApacheModRewrite 规则,加载 IISUrlRewrite 规则,自定义规则配置。
第09期-使用路由中间件
使用路由中间件,路由模板配置规则,路由约束配置,路由默认值设置,路由正则表达式,通过路由生成URL链接,通过 RouteHandler 处理默认路由,使用 RouteBuilder 生成路由表。
第08期-文件系统服务与路由
静态文件访问,文件服务器,文件缓存,使用 PhysicalFile 设置文件权限, 启用目录浏览,默认文档设置。路由系统介绍,路由中间件与 MVC 中间件配置,默认路由规则映射方式。
第07期-深入研究中间件
ASP.NET Core 中间件概述,使用 Run、Map 和 Use 方法配置请求管道,理解并设计自己的中间件,基于约定的中间件和基于工厂的中间件,中间件中的依赖注入与配置选项。
第06期-管道&中间件&依赖注入
ASP.NET Core 应用程序启动流程,中间件的作用与实现,配置服务与管道,通过 Startup 类 和 IStartupFilter 配置请求处理管道,依赖注入与生命周期。
第05期-ASP.NET Core WebAPI 技术
创建一个 ASP.NET Core WebAPI 项目,在 WebAPI 项目中使用 Entity Framework Core 进行数据访问,依赖注入 DbContext 数据上下文,连接字符串配置,数据库迁移与回滚,通过 Swashbuckle 生成 WebAPI 帮助文档。
第04期-ASP.NET Core 技术简介
介绍 ASP.NET Core 技术,为何使用 ASP.NET Core 技术,通过命令行创建一个简单的应用程序, 研究Page模型和MVC模型, 基于Razor的视图引擎学习,LocalDB轻量级数据库介绍,演示基于ASP.NET Core的简单应用。
第03期-零度微框架项目概述
介绍零度微框架中存在的问题,解决方法,基于.NET Core 创建微框架解决方案,创建项目,并介绍微框架中的每个项目用途,VS中的多线程调试方法,.NET Core中的单元测试和VS中的 Live Unit Testing 功能。
第02期-.NET Core 程序的跨平台部署
跨平台 .NET Core 程序介绍,Linux简介与入门,配置.NET Core环境,在Centos中生成 .NET Core 应用程序,打包程序集,绑定域名,上传与下载,配置Nugix反向代理,如何在Centos中部署 ASP.NET Core 网站应用程序。
第01期-.NET Core 平台技术体系介绍
介绍微软.NET框架技术的演变,.NET Core 2.0 的技术架构,新增内容和改进,包、元包和框架,命令行工具的使用,在Visual Studio 2017 创建并生成完整的.NET Core解决方案。