![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
.NET 云原生架构师训练营
文章平均质量分 74
郑子铭
微软 MVP,DotNet NB,CloudNative NB
展开
-
.NET 云原生架构师训练营(权限系统 系统演示 EntityAccess)--学习笔记
目录模块拆分 EntityAccess模块拆分EntityAccess实体权限 属性权限实体权限创建 studenthttps://localhost:7018/Student/dotnetnb2获取 studenthttps://localhost:7018/Student对 student 的 permission 做一个保护,创建一个 entitiy 的 permission,create 为 true,delete 和 update 为 f原创 2022-02-23 23:41:51 · 295 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 系统演示 ActionAccess)--学习笔记
目录模块拆分 环境配置 默认用户 ActionAccess模块拆分环境配置mysql migrationmysqldocker pull mysqldocker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root@dotnetnb666 -d mysqlname:容器名,此处命名为mysql e:配置信息,此处配置mysql的root用户的登陆密码 p:端口映射,此处映射 主机3306端口 到 容器原创 2022-02-22 21:27:33 · 306 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码重构)--学习笔记
目录模块拆分 代码重构模块拆分代码重构AuthenticationController PermissionController IAuthorizationMiddlewareResultHandler ISaveChangesInterceptorAuthenticationController新增 AuthenticationController 用于登录和注册;登录会颁发 jwt token,包含用户的 claims 和 role 的 claims登录[Ht原创 2022-02-21 22:14:46 · 367 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码实现 WebApplication)--学习笔记
目录开发任务 代码实现开发任务DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store DotNetNB.WebApplication:创建 ResourceController 和 PermissionController 进行验证代码实现ResourceController PermissionControllerResourceController创建 ResourceController,原创 2022-02-20 18:27:13 · 398 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码实现 Identity)--学习笔记
目录开发任务 代码实现开发任务DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store DotNetNB.Security.Identity:将权限赋予角色或用户;在用户登录时将 Permissions 写入用户身份 claims代码实现添加一个 Identity 的扩展,将 role 和 Permission 结合到一起定义 IRolePermissionManager 接口,提供一个 AddRol原创 2022-02-18 23:58:12 · 317 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
目录开发任务 代码实现开发任务DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store DotNetNB.Security.Store.EntityFramework:基于 mysql 创建 PermissionStore 和 ResourceStore代码实现我们需要在 ResourceProviderHostedService 中读取所有的 Resource,将 Resource 转换为 Permis原创 2022-02-17 22:56:48 · 290 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码实现 EntityAccess)--学习笔记
目录开发任务 代码实现开发任务DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store DotNetNB.Security.EntityAccess:扫描 entities;添加 ef savechanges interceptor代码实现我们现在已经通过 ActionResourceProvider 完成了 action 的扫描,生成了 ResourceModel,需要持久化到 IResourceSto原创 2022-02-16 22:22:42 · 420 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 代码实现 ActionAccess)--学习笔记
目录开发任务 代码实现开发任务DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store DotNetNB.Security.ActionAccess:扫描 action;添加 action authorize filter;添加集成方式代码实现对于一个 web 项目,Filter 是在构建构建 builder 的时候添加的builder.Services.AddControllers(options原创 2022-02-15 22:55:06 · 335 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记
目录目标 模块拆分 OPM 开发任务目标基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能模块拆分模块划分已经完成了边界的划分,边界内外职责清晰OPM根据模块拆分画出 OPM(Object Process Methodology)ActionAccess 模块中的 ActionResourceProvider 会为 RegisterActions 提供支持Core 模块会对资源进行扫描,扫描之后会得到大量 ResourceModel,将它们持久化到 I.原创 2022-02-10 23:20:14 · 369 阅读 · 0 评论 -
.NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录项目核心内容 实战目标 RGCA 四步架构法项目核心内容无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增、删除、字段级读写控制管理 与 Identity 进行融合集成实战目标RGCA 四步架构法的应用 加深对 OPM 和 OPD 的运用 为毕业设计打下基础RGCA 四步架构法Requirement:从利益相关者获取需求 Goal:将需求转化为目标(功能意图) Concept:将目标扩展为完整概念 Architecture:将概原创 2022-01-19 23:46:11 · 2262 阅读 · 0 评论 -
.NET 云原生架构师训练营(KestrelServer源码分析)--学习笔记
目录目标 源码目标理解 KestrelServer 如何接收网络请求,网络请求如何转换成 http request context(C# 可识别)源码https://github.com/dotnet/aspnetcore/在目录 aspnetcore\src\Servers\Kestrel\Core\src\Internal 下有一个 KestrelServerImplinternal class KestrelServerImpl : IServer在 host 启动原创 2022-01-17 23:05:01 · 438 阅读 · 0 评论 -
.NET 云原生架构师训练营(模板方法 && 建造者)--学习笔记
目录模板方法 源码 建造者模板方法定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤源码GitHub - dotnet/aspnetcore: ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.在目录 aspnetcore\原创 2022-01-07 22:52:04 · 516 阅读 · 0 评论 -
.NET 云原生架构师训练营(组合模式)--学习笔记
目录引入 组合模式 源码引入在上一篇执行 _connectionDelegate 之后,HttpConnectionMiddleware 处理请求return connection.ProcessRequestsAsync(_application);在 HttpConnection 中调用 IRequestProcessor 的 ProcessRequestsAsync 方法await requestProcessor.ProcessRequestsAsync(httpAp原创 2022-01-06 23:16:18 · 549 阅读 · 0 评论 -
.NET 云原生架构师训练营(责任链模式)--学习笔记
目录责任链模式 源码责任链模式职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了何时使用:在处理消息的时候以过滤很多道使用场景:有多个对象可以处理同一个请求,具体到哪个对象处理该请求由运行时刻自动确定 在不明确指定接收者的情况下,向多个对象中的一个提交一个请求 可动态指定一组对象处理请求源码GitHub - dotnet/aspnetcore: ASP.NET Core原创 2022-01-05 20:03:28 · 413 阅读 · 0 评论 -
.NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
目录设计原则 设计模式设计原则DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You Aren't Gonna Need It 你不会需要它的) CCP 共同闭包 CRP 共同复用 高内聚、低耦合 惯例优先配置 SCO 关注点分离 ADP 无依赖环 SOLID 面向对象设计原则SOLIDS - Single-responsiblity Principle 单一职责原创 2022-01-04 21:42:42 · 488 阅读 · 1 评论 -
.NET 云原生架构师训练营(ASP .NET Core 整体概念推演)--学习笔记
演化与完善整体概念ASP .NET Core 整体概念推演 整体概念推演到具体的形式ASP .NET Core 整体概念推演ASP .NET Core 其实就是通过 web framework 处理 HTTP 请求并提供 HTTP 响应web framework 由程序员使用,它包括 ASP .NET Core,Express,spring 等等组成这样我们就完成了对 ASP .NET Core 的底层建模,接下来对 HTTP 请求和 HTTP 响应进行细化对于原始 HTTP原创 2021-12-30 23:40:14 · 416 阅读 · 0 评论 -
.NET 云原生架构师训练营(RGCA 四步架构法)--学习笔记
RGCARequirement:从利益相关者获取需求 Goal:将需求转化为目标(功能意图) Concept:将目标扩展为完整概念 Architecture:将概念扩展为架构目录从利益相关者获取需求 将需求转化为目标 将目标扩展为完整概念从利益相关者获取需求有哪些类型的利益相关者 利益相关者需求 需求分类与排序 需求的特征有哪些类型的利益相关者利益相关方 关注系统的事物和对象 - 投资方 有助于解决问题的利益相关者 投资人微软、微软股东等原创 2021-12-29 22:59:09 · 341 阅读 · 0 评论 -
.NET 云原生架构师训练营(对象过程建模)--学习笔记
目录UML OPM OPM优化UML1997年发布UML标准主要域 视图 图 主要概念 结构 静态视图 类图 类、关联、泛化、依赖关系、实现、接口 用例视图 用例图 用例、参与者、关联、扩展、包括、用例泛化 实现视图 构件图 构件、接口、依赖关系、实现 部署视图 部署图 节点、构件、依赖关系、位置 动态 状态机视图 状态机图 状态、事件、转换、动作 活动视图 活动图原创 2021-12-23 23:26:57 · 582 阅读 · 0 评论 -
Go语言核心36讲(Go语言实战与应用二十七)--学习笔记
49 | 程序性能分析基础(下)在上一篇文章中,我们围绕着“怎样让程序对 CPU 概要信息进行采样”这一问题进行了探讨,今天,我们再来一起看看它的拓展问题。知识扩展问题 1:怎样设定内存概要信息的采样频率?针对内存概要信息的采样会按照一定比例收集 Go 程序在运行期间的堆内存使用情况。设定内存概要信息采样频率的方法很简单,只要为runtime.MemProfileRate变量赋值即可。这个变量的含义是,平均每分配多少个字节,就对堆内存的使用情况进行一次采样。如果把该变量的值设为0,那么,原创 2021-12-22 23:31:44 · 630 阅读 · 0 评论 -
.NET 云原生架构师训练营(系统架构)--学习笔记
目录对外展现的功能 内部功能 功能交互与价值通路 系统架构目标认识系统的价值通路 认识功能架构,通过把功能结构与形式结构结合来描述系统架构受益原则好的架构必须使人受益,要想把架构做好,就要专注于功能的涌现,使得系统把它的主要功能通过跨越系统边界的接口对外展示出来对外展现的功能ASP .NET Core 的使用者是程序员,最终的受益是老板上一讲对 ASP .NET Core 的描述是文字性描述,是一种非结构性描述,不是很准确,因为每个人对文字的理解都不一样ASP .原创 2021-12-21 23:52:19 · 963 阅读 · 1 评论 -
.NET 云原生架构师训练营(建立系统观)--学习笔记
目录目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业目标通过整体定义去认识系统 通过分解去简化对系统的认识ASP .NET CoreASP .NET Core 是什么 ASP .NET Core 是干什么的 Host、Server、HostApplication 与 ASP .NET Core 是什么关系 ASP .NET Core 和 .NET Core 是什么关系ASP .NET Core 是什么WEB FRAMEWO原创 2021-12-20 22:27:52 · 276 阅读 · 0 评论 -
.NET 云原生架构师训练营(设计原则与模式)--学习笔记
在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发、和维护的成本目录几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析、设计、实现) 设计原则 设计模式几个问题单一职责原则的职责是什么 依赖倒置中的依赖是什么?(依赖注入DI,和 IOC 控制反转) 组合与聚合的区别是什么 贫血模型与充血模型的差异在什么地方 阅读开源项目代码时,单个方法可以理解,整体看不懂为什么要学习设计模式有助于更快地读懂开源项目代原创 2021-07-04 00:38:25 · 341 阅读 · 0 评论 -
.NET 云原生架构师训练营(Identity Server)--学习笔记
目录OAuth 2.0 OpenID Connect QuickStartOAuth 2.0概念 过程 通信 组件 示例代码概念OAuth 2.0 是一个授权协议,它允许软件应用代表(而不是充当)资源拥有者去访问资源拥有者的资源(如何让一个系统组件获取另一个系统组件的访问权限)受保护的资源:是资源拥有者有权限访问的组件 资源拥有者:有权访问 API,并能将 API 访问权限委托出去 客户端:凡是使用了受保护资源上的 API,都是客户端过程通信原创 2021-07-02 00:05:07 · 233 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记
2.8 安全认证 VS 授权 ASP .NET Core 认证授权中间件 认证 JWT 认证 授权认证 VS 授权认证是一个识别用户是谁的过程 授权是一个决定用户可以干什么的过程 401 Unauthorized 未授权 403 Forbidden 禁止访问ASP .NET Core 认证授权中间件在接收到请求之后,认证(Authentication)和授权(Authorization) 发生在 路由(Routing) 和 终结点(Endpoint) 之间执行过程原创 2021-02-22 23:47:22 · 179 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记
2.7.3 Scrum 团队理想的环境 团队章程 如何组建 Scrum 团队 产品待办事项列表 用户故事 敏捷开发流程理想的环境5-9人 100% 跨职能 在一起 自组织自组织目标 授权 沟通 可视化 辅导 奖励要我做 => 我想做,我要做,我要做好团队章程团队价值观:速度与工作时间 工作协议:例如:“就绪”定义,“完成”定义 基础规则:例如:会议规则 团队规范:迟到、冲突 坦诚、高效沟通 包容 相互帮助 简洁、反馈、尊重如何组建原创 2021-01-19 23:30:54 · 258 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 Scrum 核心)--学习笔记
2.7.2 Scrum 核心3个工件 5个会议 5个价值观3个工件产品待办列表(Product Backlog) Sprint 待办列表(Sprint Backlog) 产品增量(Product Increment)5个会议产品 Backlog 梳理会议(product backlog refinement) Sprint 迭代计划会议(Sprint Planning Meeting) 每日站会(Daily Scrum Meeting) Sprint 评审会议(Sprint R原创 2021-01-18 00:17:23 · 165 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 Scrum 简介)--学习笔记
2.7.2 Scrum 简介SCRUM 是什么 SCRUM 精髓 SCRUM 框架 角色SCRUM 是什么SCRUM 是迄今为止最著名的敏捷方法,主要用于开发、交付和持续支持复杂产品的一个框架,是一个增量的、迭代式的开发过程SCRUM 精髓两个优化 三个拆分两个优化优化商业价值 优化过程优化商业价值在每个迭代结束后跟客户一起检查发布目标,并据此优化发布计划,并更新产品待办事项列表及优先级优化过程每个迭代结束后进行回顾,对团队的实践过程做优化三个拆分拆分原创 2021-01-16 00:49:42 · 180 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
2.7.1 敏捷开发敏捷介绍敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心敏捷的起源2001年,17个老头子在一起一边滑雪,一边讨论工作,制定了《敏捷软件开发宣言》从60年代中期开始到20世纪末,软件行业得到了非常迅猛的发展,软件系统的规模和复杂度也越来越高,行业普遍面临不满足需求,永远无法交付等一系列严重的问题,史称“软件危机”从长期积累的经验看,早期阶段的时间投入会影响到后期的经济支出,就是需求变化发生的越晚,对软件原创 2021-01-15 23:41:49 · 185 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 异常处理)--学习笔记
2.6.8 RabbitMQ -- Masstransit 异常处理异常处理 其他 高级功能异常处理异常与重试 重试配置 重试条件 重新投递信息 信箱异常与重试Exceptionpublic class SubmitOrderConsumer : IConsumer<SubmitOrder>{ public Task Consume(ConsumeContext<SubmitOrder> context) {原创 2021-01-15 00:15:38 · 161 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 详解)--学习笔记
2.6.7 RabbitMQ -- Masstransit 详解Consumer 消费者 Producer 生产者 Request-Response 请求-响应Consumer 消费者在 MassTransit 中,一个消费者可以消费一种或多种消息消费者的类型包括:普通消费者,saga,saga 状态机,路由活动(分布式追踪),处理器 handlers,工作消费者 job comsumersConsumer Instance Handler OthersConsumerp原创 2021-01-13 22:59:49 · 311 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 介绍)--学习笔记
2.6.6 RabbitMQ -- Masstransit 介绍Masstransit 是什么 Quickstart 消息 MessageMasstransit 是什么Masstransit 是一个 .NET 免费开源的分布式应用框架集成多种消息中间件(Rabbitmq, Azure, Service Bus, ActiveMQ, Kafka, In-Memory) 强大且完整的消息模式(发布与订阅,saga,event-driven state machine,最终一致性支持) 端到原创 2021-01-12 22:11:42 · 232 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 业务场景详解)--学习笔记
2.6.5 RabbitMQ -- 业务场景详解异步处理 应用解耦 流量削锋 日志处理异步处理串行方式 并行方式 异步方式串行方式_userRepo.Add(user);_emailService.Send(user);_smsService.Send(user);并行方式_userRepo.Add(user);var emailTask = _emailService.Send(user);var smsTask = _smsService.Send(us原创 2021-01-11 21:48:04 · 131 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 工作队列和交换机)--学习笔记
2.6.4 RabbitMQ -- 工作队列和交换机WorkQueue Publish/Subscribe Routing EmitLogWorkQueueWorkQueue:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html一个消息生产者,多个消息消费者 exchange 交换机自动恢复 对消息进行持久化 手动确认消息对消息进行持久化var properties = channel.CreateBasic原创 2021-01-10 23:25:19 · 109 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ HelloWorld)--学习笔记
2.6.3 RabbitMQ -- HelloWorld发送端 接收端 rabbitmq container 发送信息https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html新建控制台项目 Sender,Receiver添加 nuget 包:RabbitMQ.Client发送端namespace Sender{ class Sender { public static void Ma原创 2021-01-09 22:33:23 · 193 阅读 · 4 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 消息队列 介绍与基础)--学习笔记
2.6.1 消息队列 -- 介绍主要使用场景 队列的三种形式 消息队列的优点主要使用场景典型的异步处理 流量削锋 应用解耦队列的三种形式点对点 工作队列 发布与订阅消息队列的优点1、屏蔽异构平台的细节:发送方、接收方系统之间不需要了解双方,只需认识消息。2、异步:消息堆积能力;发送方接收方不需同时在线,发送方接收方不需同时扩容(削峰)。3、解耦:防止引入过多的API给系统的稳定性带来风险;调用方使用不当会给被调用方系统造成压力,被调用方处理不当会降低调用方系统的响应原创 2021-01-08 22:46:13 · 117 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
2.5.8 MongoDB -- API重构Lighter.Domain Lighter.Application.Contract Lighter.Application LighterApi Lighter.Application.TestsLighter.Domain将数据实体转移到 Lighter.Domain 层Lighter.Application.Contract将业务从controller 抽取到 Lighter.Application 层,并为业务建立抽象接口原创 2021-01-07 23:06:59 · 122 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
2.5.7 MongoDB -- API实现问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现QuestionControllernamespace LighterApi.Controller{ [ApiController] [Route("api/[controller]")] public class QuestionController : ControllerB原创 2021-01-06 22:41:57 · 118 阅读 · 2 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记
2.5.6 MongoDB -- 问答系统MongoDB 数据库设计 API 实现概述MongoDB 数据库设计设计优化内嵌(mongo)还是引用(mysql) 数据一致性范式:将数据分散到不同的集合;反范式:使用内嵌文档在范式化的情况下需要在进行多次查询再拼装数据,或者使用 lookup,即跨表查询;反范式化的情况下可以直接查出相关数据更适合内嵌 更适合引用 子文档较小 子文档较大 数据不会定期改变 数据经常改变 最终数据一致即可 中间阶段数原创 2021-01-05 22:58:49 · 154 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
2.5.5 MongoDB -- 聚合排序 索引类型 创建索引排序// 升序db.getCollection('author').find({}).sort({"age": 1}).limit(20)// 降序db.getCollection('author').find({}).sort({"age": -1}).limit(20)// 组合db.getCollection('author').find({}).sort({"age": 1, "name": -1}).lim原创 2021-01-04 23:55:48 · 96 阅读 · 0 评论 -
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记
2.5.4 MongoDB -- 更新和删除整体更新 更新字段 字段操作 数组操作 删除https://docs.mongodb.com/manual/reference/operator/update/updateOne updateMany replaceOne整体更新db.questions.replaceOne({},{})更新字段db.author.updateOne({"name":"mingson"}, { $set: {"ag原创 2021-01-03 23:44:18 · 89 阅读 · 0 评论