面试官:. NET5源码里用到了哪些设计模式?懵!
作为微软最早迈向开源的重要软件之一,.NET 5的发布具有重要意义!
微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明年发布的 .NET 6.0 将 Xamarin 开发者过渡到统一平台奠定基础。
版本发布时间轴:
.NET 5.0是我们的.NET统一之旅的第一个版本。构建.NET 5.0是为了让更多的开发人员能够将他们的.NET Framework代码和应用程序迁移到.NET5.0。
自首个预览版发布以来微软已经进行了广泛的内部部署,除了在 .NET 5.0 上运行 .NET 网站外,Bing 也在使用这个新平台。
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制ASP.NET通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务,ASP.NET在内部专门维护了一个DI容器来提供所需的服务。要了解这个DI容器以及现实其中的服务提供机制,我们先得知道什么是DI(Dependence Injection),而一旦我们提到DI,又不得不说IoC(Inverse of Control)。
.NET5核心IOC容器如何实现
我听到很多人将IoC说成是一种“面向对象的设计模式”,但IoC不能算作一种“设计模式”!
1、工厂模式
工厂模式(Factory Pattern)是 C# 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
依赖注入框架中有着大量的工厂模式的代码,注册服务的时候我们可以通过一个工厂方法委托来获取服务实例.
依赖注入的本质就是将对象的创建交给 IOC 容器来处理,所以其实 IOC 容器本质就是一个工厂,从 IOC 中获取服务实例的过程就是工厂创建对象的过程,只是会根据服务的生命周期来决定是创建新对象还是返回已有对象。
其他的一些使用场景例如:日志记录器、数据库访问。
2.抽象工厂模式
围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
使用场景:QQ 换皮肤,一整套一起换;生成不同操作系统的程序。
3.策略模式
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
asp.net core 中的认证和授权,就是策略模式的应用,在使用 [Authorize] 的时候会使用默认的 policy,也可以指定要使用的策略 [Authorize("Policy1")] 这样就会使用另外一种策略 Policy1,policy 还是比较简单的。
而不同的认证模式(Cookie/JWT/自定义Token等)其实是不同的处理方法,也就是策略模式中不同的算法实现,指定哪种认证模式,就是使用哪种算法实现来获取用户信息。
4.综合案例实战:(手写.NET5 IOC源码)
可能有的朋友还是区分不了依赖倒置、依赖注入、控制反转这几个名词,或许知道的也只是知道依赖倒置是原则,依赖注入、控制反转都是实现的方式,我将在下面课程做详细的介绍,在篇幅的最后还会自己实现了IoC容器的功能。
.NET5的执行引擎Middleware源码如何实现
1.责任链模式
为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
使用场景:1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。3、可动态指定一组对象处理请求。asp.net core 中间件的设计就是责任链模式的应用和变形。
每个中间件根据需要处理请求,并且可以根据请求信息自己决定是否传递给下一个中间件,我也受此启发,封装了一个 PipelineBuilder 可以轻松构建中间件模式代码。
2.迭代器模式
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
C#中Array 和 List 各自实现了自己的迭代器,是非常经典的迭代器模式!
3.空对象模式
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。
4.综合案例实战:(手写.NET5 Middleware源码)
学习.NET 5必须学习中间件,中间件是什么?
中间件是组装到应用程序管道中以处理请求和响应的软件。
我们经常在startup的configure中调用的app.use()方法,其实也就是向这个集合中添加一个middleware,Context进入后,必须被该Middleware处理。
ASP.NET Core Middleware是在应用程序处理管道pipeline中用于处理请求和操作响应的组件。
研究.NET5的源码,是一件非常枯燥、艰巨的事情,从设计模式的角度去研究,是一个很好的办法,也就是探究.NET5源码底层哪些用到了设计模式,运用这些设计模式,如何去手写.NET5底层核心内容,通过这种方法,相信对你识.NET5底层,提升自身实战能力有很大的帮助!
.NET5内部技术架构集训营
2020年12月22日~23日晚8点~9点30,.NET资深架构师Tony老师,将带领带领大家开启《纯手写.NET 5源码+设计模式》三天特训营,带领大家深入解读源码,手撸设计模式!
一
超多资料,免费领取
添加微信:ruanmou_xy
仅限前100名免费领取!
送完恢复原价!
面试官:. NET5源码里用到了哪些设计模式?懵!相关推荐
- 面试字节跳动,被面试官的源码问题问到怀疑人生
面试字节跳动,被面试官的源码问题问到怀疑人生 最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面 ...
- 闷棍暴打面试官 Spring源码系列: (一) Spring 如何解决循环依赖
前言 初夏时节, 时间: AM 7.30分左右, 空无一人的健身房里,一个硕大的身体在跑步机上扭动着, 不一会头上便挥汗如雨, 他嘴上还不时嘀咕着 "循环依赖,单例模式,Bean的定位加载注 ...
- 最新蓝色简约的小储云商城官网源码
介绍: 一款优秀的Ds官网源码. 使用教程: 1.上传源码到服务器根目录. 2.修改index.html和jztc.html里的内容即可. 网盘下载地址: https://zijiewangpan.c ...
- 网络科技公司官网源码网站建设官网建站公司模板
模板介绍: (电脑+手机端)[2023新版升级]高端大气网络科技公司官网源码网站建设官网企业建站小程序开发企业官源码 网站源码下载PbootCMS内核开发的网站模板,该模板适用于网站建设.小程序建设 ...
- Go 源码里的这些 //go: 指令,go:linkname 你知道吗?
原文地址: Go 源码里的这些 //go: 指令,你知道吗? 一文解惑 //go:linkname 指令
- 源码里查看Android版本
源码里查看Android版本:build/core/version_defaults.mk
- 一朝读码深似海,不读源码薪难升!读懂.NET5源码,到底多重要?
谈到源码分析,很多人会有这样的疑问:".NET5的基本功能我已经掌握了,还有读源码的必要吗?" 实际上,阅读源码不仅能够帮你更深刻地理解底层设计原理,提升你的系统架构能力和编码功力 ...
- 我的世界SkyPixel像素天空HTML官网源码
简介: 我的世界SkyPixel像素天空HTML官网源码,上传HTML源码至空间网站目录,绑定域名即可访问.源码自带中文和英文 网盘下载地址: http://kekewangLuo.cc/1AtBrL ...
- 帝国CMS仿写朵朵云棋牌游戏官网源码
帝国CMS仿写朵朵云棋牌游戏官网源码 下载地址: http://www.bytepan.com/aLBtMe2g40P
最新文章
- ST-3806系列单圈编码器 说明书
- Java基础 集合(Collection)结构详解 Collection和Collections的区别
- 利用aircrack-ng工具获取附近wifi的密码
- 探秘react,一文弄懂react的基本使用和高级特性
- sql插入临时表数据的方法
- Java LinkedList公共对象peek()方法(带示例)
- 大厂机密!30 个提升团队研发效能的锦囊
- 多元线性回归matlab代码例题_多元线性回归matlab程序
- jqueryui / accordion的用法记录
- python set类型
- 《你只是看起来很努力》--读书笔记
- R语言:网页抓取之get the data
- (65)-- 爬取兄弟连老师信息
- 科来数据包生成器找不到网卡适配器
- 色谱柱L分类保存与使用注意事项 【Chro】
- layui制作二维码
- Qt中多pro与多pri合作编程
- 2021年10月-精品总结汇报PPT模板-15套
- 泛融云计算机研究院,新基建驱动云计算升级 深圳市泛融云计算研究院成立
- Matlab 与stm32单片机之间的串口通信项目实战