目录 引入 组合模式 源码 引入 在上一篇执行 _connectionDelegate 之后,HttpConnectionMiddleware 处理请求 return connection.ProcessRequestsAsync(_application); 在 HttpConnection 中调用 IRequestProcessor 的 ProcessRequestsAsync 方法 await requestProcessor.ProcessRequestsAsync(httpApplic…
目录 模板方法 源码 建造者 模板方法 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 源码 https://github.com/dotnet/aspnetcore/ 在目录 aspnetcore\src\Mvc\Mvc.Core\src\Infrastructure 下有一个 ControllerActionInvoker,它继承自 ResourceInvoker internal class ControllerActi…
目录 OAuth 2.0 OpenID Connect QuickStart OAuth 2.0 概念 过程 通信 组件 示例代码 概念 OAuth 2.0 是一个授权协议,它允许软件应用代表(而不是充当)资源拥有者去访问资源拥有者的资源(如何让一个系统组件获取另一个系统组件的访问权限) 受保护的资源:是资源拥有者有权限访问的组件 资源拥有者:有权访问 API,并能将 API 访问权限委托出去 客户端:凡是使用了受保护资源上的 API,都是客户端 过程 通信 组件 访问令牌 token 权限范围…
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, Forms, Rationale/Constraints} 元素.形式/模式.基本原理和限制 为什么需要软件架构? 软件架构的终极目标是用最小的人力成本来满足构建和维护系统的需求 一个软件架构的优劣,可以用它满足用户需求的成本来衡量.如果该成本很低,并且在系统的整个生命周期内一直都维持这样的低成本,那…
目录 目标 源码 目标 理解 KestrelServer 如何接收网络请求,网络请求如何转换成 http request context(C# 可识别) 源码 https://github.com/dotnet/aspnetcore/ 在目录 aspnetcore\src\Servers\Kestrel\Core\src\Internal 下有一个 KestrelServerImpl internal class KestrelServerImpl : IServer 在 host 启动的时候调…
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NET Core 是什么 ASP .NET Core 是干什么的 Host.Server.HostApplication 与 ASP .NET Core 是什么关系 ASP .NET Core 和 .NET Core 是什么关系 ASP .NET Core 是什么 WEB FRAMEWORK(形式) A…
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity 进行融合集成 实战目标 RGCA 四步架构法的应用 加深对 OPM 和 OPD 的运用 为毕业设计打下基础 RGCA 四步架构法 Requirement:从利益相关者获取需求 Goal:将需求转化为目标(功能意图) Concept:将目标扩展为完整概念 Architecture:将概念扩展为架构…
2.4.6 EF Core -- 更新 状态 自动变更检测 不查询删除和更新 并发 状态 Entity State Property State Entity State Added 添加 Unchanged 没有变化 Modified 已修改 Deleted 已删除 Detached 未跟踪 Property State IsModified CurrentValue OriginValue 自动变更检测 使用自动变更检测完成确定字段的更新 使用自动变更检测完成任意字段的更新 使用自动变更检测…
2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到不同的集合:反范式:使用内嵌文档 在范式化的情况下需要在进行多次查询再拼装数据,或者使用 lookup,即跨表查询:反范式化的情况下可以直接查出相关数据 更适合内嵌 更适合引用 子文档较小 子文档较大 数据不会定期改变 数据经常改变 最终数据一致即可 中间阶段数据必须一致 文档数据小幅增加 文档数据…
2.5.7 MongoDB -- API实现 问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现 QuestionController namespace LighterApi.Controller { [ApiController] [Route("api/[controller]")] public class QuestionController : ControllerBase { privat…