开源 .Net 让微软拥有更多开发者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源 .Net 让微软拥有更多开发者相关的知识,希望对你有一定的参考价值。

就在两年前,微软做了一件令人意想不到的事情:它宣称将开源其 .Net 开发框架,这包括 .Net Core 及ASP.Net 等。这份公告非常令人吃惊,因为微软长久以来一直仇视开源项目,担忧开源软件破坏其软件生态。随着微软 CEO 纳德拉宣称“微软爱 ​​Linux​​”,微软在开源方面的举措频频,不仅仅在 GitHub 上其名下的几个仓库活跃非凡,而且也和各种开源厂商积极展开合作。

开源

不管微软积极拥抱开源背后的想法是什么,或许是想通过开源销售更多的软件或者云服务,也有可能是想吸引更多的开发者到微软平台上,但是目前看起来微软这步棋是下对了。从微软开源 .Net 和  ASP.Net 之后的分析看,微软的开源战略已经值回票价了。

微软现在将 .Net Core 定位为跨平台开发框架,不只是 Windows,而且也延伸到了 MacOS 和 Linux 平台之上。.Net Core RC1 是 2015 年 11 月发布到 GitHub 上的,而今年 6 月就发布了 1.0 版本。开发者们对此表示认可,微软合作伙伴总监项目经理  Scott Hunter 如是说:

“40% 的 .Net Core 客户是新进入该平台的用户,这就是我们(开源)的目的,我们希望吸引新的用户。”

由于 .Net Core 的开源,过去一年以来, .Net 的开发者增加了 61%。 Hunter 在 11 月的一次讲演中提到,GitHub 上 .Net 上的开发活跃度增长极快。虽然 .Net Core 并没有直接给微软带来收入,但是其潜在地增加了收益。Rob Sanfilippo 说,“可以说,这项技术间接地通过 Azure 服务和微软开发者工具增加了微软的收入。”。

程序员们表现活跃

.Net 程序员和博客作者 Matt Warren 把.Net 的开源称之为“成功”。其数据明确地显示社区积极地参与了微软在 GitHub 上开源的多个仓库的活动。

“开源社区汇报了问题和建议,并通过发送拉取请求(PR)而实际贡献了代码,经过一段时间之后,这些代码就会被包括到产品里面,而社区的贡献量还在持续增长”,Warren 说,“我积极跟踪和参与了 CoreCLR 和 .Net Core Lab 这些仓库的讨论,因此获得了社区贡献的第一手资料。”

微软的举措是否完全成功还不能完全定论,未来或许还有变数,但是这终究是从封闭走向开放的一步。他说,“我的意思是,他们并不是仅仅把源代码放在那里就行了,而是努力让社区可以参与进来。”

微软最近发布的 Visual Studio for Mac 也为  .Net Core 带来了利好

“这是 Visual Studio IDE 首次发布到非 Windows 平台上(Visual Studio Code 是不同的技术,而且它根本不算 IDE),它是基于微软收购的 Xamarin 的技术,重点关注于 .Net Core 开发”,Sanfillippo 说,“这次发布近一步带动了 .Net Core 的发展。”

微软最近也准备在 Visual Studio 2017 IDE 中增强 .Net Core 工具,包括简化 .Net Core 项目文件的格式。微软开源 .Net 让外界对它的观感有所改变, Warren 说,“现在感觉(微软)更开放和更平易近人了。”相对于某些公司,虽然开源社区还对微软抱有一定的疑虑,但是显然,微软已经不是开源社区最敌视的公司了。

面试官:. NET5源码里用到了哪些设计模式?懵!

作为微软最早迈向开源的重要软件之一,.NET 5的发布具有重要意义!


微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明年发布的 .NET 6.0 将 Xamarin 开发者过渡到统一平台奠定基础。

版本发布时间轴:



.NET 5.0是我们的.NET统一之旅的第一个版本。构建.NET 5.0是为了让更多的开发人员能够将他们的.NET Framework代码和应用程序迁移到.NET5.0。


面试官:. NET5源码里用到了哪些设计模式?懵!



自首个预览版发布以来微软已经进行了广泛的内部部署,除了在 .NET 5.0 上运行 .NET 网站外,Bing 也在使用这个新平台。


ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制ASP.NET通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务,ASP.NET在内部专门维护了一个DI容器来提供所需的服务。要了解这个DI容器以及现实其中的服务提供机制,我们先得知道什么是DI(Dependence Injection),而一旦我们提到DI,又不得不说IoC(Inverse of Control)。


.NET5核心IOC容器如何实现
面试官:. NET5源码里用到了哪些设计模式?懵!


我听到很多人将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源码如何实现
面试官:. NET5源码里用到了哪些设计模式?懵!

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源码+设计模式》三天特训营,带领大家深入解读源码,手撸设计模式!



超多资料,免费领取

仅限前100名免费领取!

送完恢复原价!

以上是关于开源 .Net 让微软拥有更多开发者的主要内容,如果未能解决你的问题,请参考以下文章

牛津计划折射微软开源领域“大步走”

微软“十大”开源之举

跟着老桂学ASP.NET Core 2.0

面试官:. NET5源码里用到了哪些设计模式?懵!

LC3开源盛会首次在中国举办,让更多开发者了解开源

微软与Node.js的开源之旅