微软如何让我对C 和.NET 重拾旧爱

“为什么你会想要使用ASP.NET,还活90年代?”,几年前,当我提出考虑要在一个项目中使用ASP.NET时候,我的一位老同事的回应。当时我很大程度上认同他的看法。微软雇佣了一个伟大的程序员,开发了一个伟大的语言,创建了一个伟大的Web框架和IDE工具,但人们仍然不太满意。那次我们最终没有为该项目使用ASP.NET的主要原因是因为语言和框架的封闭模式。使用ASP.NET意味着为我们的服务器必须支付Windows服务器许可证费用,或者为了让我们的C#应用程序跑在Linux上,我们就必须的使用Mono,一个漏洞百出,需要填很多的坑的不成熟的玩具。

但从那以后,很多事情都发生了变化,微软真真切切的改变了游戏规则,并将ASP.NET从被迫使用的东西变成适宜的选择,因为即使是最铁杆时髦开发者,你的雇主也需要使用它来满足需求,.net core 变成了满足需求的称手工具。

当很多年前第一次学习C#时,我认为它是有史以来最好的编程语言。但是我的兴奋并没有持续很长时间,很快我就发现发现他有很多的缺点。我很早就开始学习ASP.NET Core,几乎在第刚开始公开发布的时候就已经关注它了。当微软微软宣布要实现ASP.NET Core跨平台时候,我对ASP.NET Core和C#的兴趣就再次被提了起来。

所以,微软当时的体系的问题并不在于他们技术、性能或其他大多数指标。问题在于它被限定在Windows这个专有的平台,你不得不使用专有的需要付费微软技术,比如Windows Server和IIS来部署你的应用程序。这意味着与大多数其他技术体系相比,你服务的运行成本要高得多,甚至是C#的最大竞争对手Java。就算这成本对于每年产生很多收入的大型企业而言,与支付的开发人员工资而言算不得什么。但对于早期初创企业或试图用其搞点副业的的开发人员来说,这还是有点贵。

与微软的体系相关的另一个糟糕的问题是,他们的技术太陈旧,有很多陈旧的、丑陋的和不一致的API,这使得整个体系看起来很臃肿。

随着.NET Core,ASP.NET Core和C#的更新版本的推出,微软确实改变了游戏规则。 C#已经是行业内使用的顶级语言之一,但微软采取的顺应潮流的做法确实使他们的位置得到了保留,并帮助其被大量运用。如果你对这比较生疏,让我来先来解释下:.NET Core是微软几年前发布的一个新框架,在此之前它解决了所有缺点。它是跨平台,高性能,精致,并且最重要的是他还开源。以前没有人想过微软会发布任何可以在Windows以外的平台上运行的东西,没想过微软整个开发平台可以在Linux或者苹果的Mac OS X上运行。

微软.net core开发体系

微软体系结构有点庞乱,下面概要介绍下其中的主角:

C# 语言

这是微软开发的通用编程语言的名称,是ECMA(欧洲计算机制造联合会)批准的标准语言(ECMA 334),也是ISO标准语言(ISO/IEC 23271:2006)。本文章主要以C# V7为例,其他相关信息,参考微软的C#网站。

说到ECMA我们说给话外主题,大家常说Javascript的实际上是个惯例叫法,但是这个叫法是有问题的。js的真正名字是ECMAScript(ECMA262),早期js还是归网景公司的时候,为了蹭java语言的热点,所以叫了Javascript,但是这个名字是被SUN注册商标的,但是SUN还是个很地道的公司,也没有究其法律责任,所以叫法就延续下来了。直到网景公司将他捐给了ECMA,才真正叫了ECMAScript,Javascript但是叫顺了也被延续下来了。但是后来SUN被Oracle收购了,包括Java、mysql和Javascript都是Oracle的商标,所以现在如果公司在某些商业场合时候不注意用Javascript时候会有版权纠纷的。毕竟Oracle已经把谷歌告了,还要求赔几十亿刀,也有js开发者的应用使用Javascript这个名字收到Oracle的律师信,所以作为一个话外题给大家提个醒。

.NET 框架

这是一个通用应用程序程序开发框架。它可以用于创建从桌面应用程序、移动应用程序到Web应用程序的所有应用。但只能在Microsoft的Windows平台上运行。

.NET Core

这是跨平台.NET的新版本,适用于大多数主要平台等非微软Windows平台。这应该是下一代.NET框架

ASP.NET Core

这是一个基于.NET Core框架构建的Web应用程序框架。这是之前ASP.NET的后继者。ASP.NET只支持在windows IIS下运行。

看完主角简介,让我们更深入了解下微软基于.NET Core的新技术体系,就是这些技术体系让我喜欢上C#和.NET Core的。

特性

从外部看,整个新的.NET Core生态系统可能看起来像是一只披着喜羊羊皮的灰太狼,对那些没有做过多少研究的人来说,很容易认为它只是旧版.NET Framework旧人换新婚纱的版本。但事实并非如此,微软近年内一直在努力推动开源战略。微软宣称,.NET Core与其前任不同之处在于新增的功能。最大的特点是新的技术体系是跨平台的。跨平台实施并不像我们过去看到过的其他一些语言那样简单,他们基于跨平台的思想重新构建了整个体系架构。这也使得能够使用最新的应用包装系统,例如容器和的Docker。他们还开发了一些合宜的工具,可以让你基于.NET Core进行跨平台开发,这是微软以前从未做过的事情。

另一个主要功能是删除对IIS的依赖,这是微软自家的Web服务器。微软创建了一个新的没有依赖的嵌入式Web服务器Kestrel,它不仅没有任何的依赖,而且还支持开发人员将它嵌入到应用程序中去,无需另外再安装运行环境,从而为部署增加了更多的灵活性。然而,这些还不是的.NET Core所带来的全部功能。更多功能,可以参考,微软官方的Microsoft .NET Core Guide系列。

体系架构的新鲜血液注入不仅限于.NET Core,C#也一直在持续更新,并增加了许多有用的功能。值得提及的有tuples,Async/await,local 函数等,C#的开发也更加便捷高效。

性能

开始使用.NET Core的另一个重要原因就是性能的极大改进。当涉及流行的通用编程语言之间的性能对比项目是,微软再次成为了吸人眼球的焦点。性能是开发社区中一个敏感的主题,因为体系和工具只有在优化应用程序的性能时才能带你到达目的地,剩下的事由码农来搞定就行。但是,开发体系可以做的是鼓励并强化性能的最佳实践,并优化常用的使用场景,以便在更大的范围内最大限度地提高性能,而这正是微软所最擅长的。

C#本身就是一种令人惊叹的语言,并且内置许多功能,可以让你调整应用程序的性能,但.NET Core团队一直在努力优化大量内置API以实现最佳性能。即使早期版本的ASP.NET Core在TechEmpower Benchmarks的性能都已经夺人眼球。有大量的企业利用.NET Core中可用的性能优化以最大限度地提高效率的例子。微软最近发布了最新版本的.NET Core 2.1以及带来的巨大地性能改进。

多功能性

让我再次拾起微软体系的最大原因是多功能性。由于他是开源、跨平台的,我几乎可以用一个技术栈不出体系就能构建一切,做全栈开发。你可以使用UWP构建桌面应用程序,使用Xamarin(现为Microsoft的一部分)开发跨平台移动应用程序,使用ASP.NET Core做Web开发,使用SignalR发布实时应用程序等。我的开发哲学是”用正确的工作,做正确的任务”,而.net core让我仍然可以使用我熟悉和喜爱的语言,高效的工具和API的高效率的完成开发,而且最重要的是所有这一切都是免费的。

工具

我最后要说的是工具。工具链是当前.NET生态系统做的最好的事情之一。你有很多种在多个平台上开发的方式。如果你喜欢使用IDE,Microsoft的主IDE,Visual Studio是首屈一指的。对于那些喜欢对其工具进行更多设置改装的,并且比较讨厌使用现成IDE提供的工具的用户,可以选择微软开源的Visual Studio Code,这是微软一个免费开源的代码编辑器和命令行工具,它们允许你构建,测试和开发应用程序,也算是一个完整的IDE。 VS Code支持大量的第三方扩展,可以帮助你更好地开发,提升你的开发体验。

微软也推出了 Mac版的Visual Studio,与Windows版本不同,但它是一个完整的软件包,可让你在Mac OS上的Microsoft全新开发体系下进行开发。如果你在Linux上,或者只是想使用非微软家产品的IDE,可以选用Jetbrains的产品,他们已经发布了一个名为Rider的IDE,非常棒,是我在Mac上开发的主力开发工具。

Rider支持Windows、Linux和Mac OS三大要平台。我的主要开发机器是MacBook,我非常喜欢Jetbrains Rider或VSCode的工作流程。微软的Intellisense自动完成系统是我在现有的开发体系中找到的最佳地解决方案,而且通过添加诸如Jetbrains ReSharper等工具,可以实现一个完美高效的开发平台,应该找不到比这更好的其他工具组合了。

微软一直在开发工具上长期投入时间和工程设计,他们拥有稳定的开发体系,经验丰富且知识渊博的工程团队以及多年积累的信任。新的.NET Core开辟了一个更大的市场,同时展示了一家大型公司可以做什么以及他们能够怎么快速转型。在现任CEO Satya Nadella被任命后,他开始推动公司的工程和开发方面,从而进行所有这些重大变革,依托其工程背景,改革目前看来很成功。

C#和.NET Core可能是微软在开发领域长期以来所做最好的事情,也是献给开源界的一份大礼。当然我在此还要提到这体系外用来替代JS的一个最流行的免费开源编程语言Typescript。也是伟大程序员安德斯·海尔斯伯格发明有又一干货(Delphi,.net,J++ ,C#,F#)。