118

探讨.NET Core的未来

 5 years ago
source link: http://www.infoq.com/cn/articles/future-of-net-core?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文要点

  • 与传统的.NET Framework相比,.NET Core平台具有显著的性能优势。
  • .NET Core在Microsoft平台之外也广为采用,并受益于强大的社区参与。
  • .NET Core在设计上采用以服务器为中心,而非聚焦于Windows。.NET Core开发受益于这种设计。
  • .NET Core现已成为一种适用于新应用开发的稳定平台。

随着.NET Core 2.0的发布,这个最初发布于2016年的平台终于有了最新的主版本,该平台具有通用性、模块化、跨平台和开放源代码的特性。.Net Core涵盖了当前.NET Framework版本中可用的很多API。其初衷是为下一代 ASP.NET 解决方案提供支持,但现在却已成为其它许多应用场景的基础,例如物联网、云计算和下一代移动解决方案。在本系列文章中,我们将探讨.NET Core的一些优势,以及它如何给传统.NET开发者以及所有需要为市场提供强大、高性能和经济解决方案的技术人员带来好处。

这篇是“.NET Core”系列文章的一部分。读者可以通过订阅RSS接收更新通知。

在本文中,五位资深开发人员对.NET Core平台开展做了一次探讨,内容涉及.NET Core的应用情况,以及其未来的发展方向。通过本文,读者可一窥平台的优缺点,并确定自己是否可在未来做开发时从中受益。

讨论小组成员

  • Jeff Ammons
  • Jeremy Miller
  • David Pine
  • Mark Rendle
  • Spencer Schneidenbach

InfoQ:先请大家做个简要的自我介绍,以及目前使用.NET Core的情况。

Jeff:我早在.NET Core还被称为ASP.NET vNext时就开始跟进。虽然我在2012年几乎远离了Microsoft开发,但是vNext让我重拾旧业!我从2014年开始着手宣讲Core,因为在我看来,它为服务器端/Web项目提供了一个更好的基础。

Jeremy:我牵头了多个.NET社区的OSS项目,其中部分项目的目标就是混用整个.NET Framework和NETStandard。

David:我自2015年下半年以来就一直在使用.NET Core做开发。此后在2016年1月,我开始做PoC(概念验证,Proof-of-Concept)应用。从那时起,我们整个团队一直在积极使用.NET Core做开发。我们借助ASP.NET Core构建企业Web应用。在当时,它还被称作ASP.NET 5,依赖于.xproj文件格式和project.json。我认为自己是一名.NET Core的早期采用者,非常高兴看到.NET Core的发展。同样,我对开发者社区心存感激,正是社区帮助该Microsoft产品定型发展,并使其发展超出人们的预期。我相信NET Core只会变得更好。

Mark:我从开始就是一位.NET用户,并自第一次预览版发布以来就在持续使用.NET Core,当时它被称为Project K。我一直为团队和组织提供培训课程和咨询,其中包括.NET Core本身,以及其开放的新生态系统,诸如Linux、Docker、Kubernetes等。我目前正在开发关于使用ASP.NET Core构建云原生应用的一系列在线课程。

Spencer:我曾在一些新建的项目中使用了.NET Core,这些项目主要是将ASP.NET Core用做React-Redux应用的后端。我还召集了数次ASP.NET Core的研讨会,其中一次是聚焦于Angular,还有一次是聚焦于ASP.NET Core本身。它们均可由.NET Core提供支持!

InfoQ:你们喜欢.NET Core的哪些强大之处?

Jeff:每次我在做关于Core的演讲中,该问题都会被问及。例如,“作为一名Windows开发人员,我为什么要关心跨平台问题?”。答案就在于性能上的考虑。最初,.NET是在单台Windows计算机上针对单用户做的优化。与针对多台服务器上的大量用户做了优化的技术(例如Node等)相比,.NET如果仅绑定于Windows并面向单一用户,那么其将难以在多用户服务器环境中创建超高性能的应用。Core使得Microsoft得以将开发基础重置为以服务器为中心的模式。

Jeremy:我个人最喜欢之处在于它是跨平台的。我能够将.NET Core的大部分开发工作移植到其它操作系统上。虽然简化csproj文件格式正的确是朝正确方向迈出的一大步,但我仍希望.Net Core能够保持更简洁的project.json格式。dotnet cli工具是我编写的书中的一个亮点。相比以往而言,它极大地简化了OSS工具脚本的构建,最终以简洁的命令行工具启动和管理项目文件。改进的Nuget工具结合了更好的csproj文件格式,这极大地降低了我们在上一代经常会碰到的Nuget和Visual Studio.Net的合并冲突问题,无需诉诸于Paket这类大多数开发人员不太了解的工具。

David:很明显,.NET Core的开源、跨平台和卓越性能会受到大多数开发人员的喜爱。 但我的喜欢之处在于.NET Core依然是.NET。如果你曾经在.NET中做过开发,尤其是使用过C#,那么你就会接触到那些优秀的工具、令人叹为观止的社区,以及世界上最强大的编程语言之一。我相信.NET Core对Microsoft而言是迈向正确方向的一步,这对于所有的框架开发人员来说尤为重要。开放源码和跨平台应该成为标准。开发人员可以对C#语言或者是.NET Core中的一项功能做出贡献,并产生影响,这是Microsoft所取得的一项令人难以置信的成就。赋予开发人员阅读源代码、设计实现和运作内部架构的能力是非常有必要的。为此,我向Microsoft脱帽(“红帽子”,Red Hat)致敬。

Mark:.NET Core的强大之处主要在于跨平台支持。事实上,你可以开发一个运行在Windows或Linux上的独立应用,或者使用macOS开发可在x86和ARM CPU上运行的应用,这一点令人惊叹。最重要的是,由于采用了正确的开源发展方式,我们已经看到了由社区给出的一些惊人贡献。这使得其性能得到了改善,尤其是在网络方面,并且还有更多的改进即将推出。我们可以在继续使用C#以及一些熟悉的框架和库的情况下,获得所有这些现代优点,这是非常美妙的事情。

Spencer:跨平台绝对是.NET Core的最大卖点和最大优势。我先前曾提出过这一观点,即.NET Core旨在吸引下一代的开发人员,而非那些目前使用.NET Framework的开发人员。但是,随着.NET Core中添加了越来越多的功能(例如System.Drawing和System.DirectoryServices等,不胜枚举),我想我们会看到更多的.NET开发人员和商店转移到.NET Core。

InfoQ:目前.NET Core中是否还存在一些缺点,这些缺点是你们希望在未来能得到改进的?

Jeff:一些重要遗漏将会随时间的推移而得到添加。在过去一年中,改善就非常显著。去年秋天之前,Core的巨大弱点在于.NET、ASP.NET和Visual Studio团队之间的脱节问题。但是在秋季发布之后,团队的脱节问题得到了解决,这才使我可以向其他人推荐使用Core做开发。另一个很好的例子是project.json转换为*.csproj的彻底失败。但是该过程的变化过晚,因此对于早期创建生产项目的人而言,这无疑是一种惩罚。我们需要Core能达到一个稳定的高度,才可以认真地考虑着手采纳的问题。

Jeremy:在我看来,如果开发人员需要直接编辑csproj文件,那么目前的文件格式仍然过于繁琐。为消除一些MSBuild内部关注的问题,同时将文件格式推向用户友好的方向,Core在工具和文件格式方面还存在着一定的改进余地。我非常希望看到能推出AssemblyLoadContext概念,并以此作为曾经的AppDomain模型的一个轻量级继任者。

David:当前,.NET Core的一个主要弱点就是随之而生的一些误解。无数的开发人员仍然在问,“.NET Core、.NET Standard和.NET Framework有什么区别?”。类似问题还包括,开发人员应该选择哪一个,以及为什么。选择并非总是那么简单或清楚。例如,实际上可能存在以.NET Framework为目标的.NET Core应用。这样的应用的确可能会令人困惑,因为我们知道.NET Framework和.NET Core都是.NET Standard的运行时实现。.NET Core的术语被重载,存在.NET Core应用、.NET Core CLI、.NET Core SDK和.NET Core运行时。我相信,在使所有这些术语更易于理解和使用的方面上还有很大的提升空间。

Mark:Core在性能方面还有一些工作要做。例如,在TechEmpower“纯文本”基准测试中,ASP.NET Core的Web服务器Kestrel表现极佳;但在涉及数据库查询等的高级测试中,Kestrel则表现不佳。在性能方面上,大部分从完全(full-fat).NET Framework迁移过来的代码都可以得到很大的改进。好消息是,现在人们正在深入研究代码,并挖掘这些性能问题。

Spencer: Core缺乏一些与.NET Framework相匹配的功能。这意味着当前的.NET开发人员在尝试.NET Core时,必须要决定.NET Framework的某些核心功能是否值得弃用。如果你正在使用System.Drawing、System.DirectoryServices,或是某些仅针对.NET Framework的框架,那么你就不会那么好运了。ASP.NET Core已经是一个非常成熟的产品,从ASP.NET MVC/Web API转向非常简单,但并非所有的事情都是如此。例如,Entity Framework 6到EF Core的转换就并非易事。

InfoQ:如果现在你要为组织启动一个新项目,你会选择.NET Core而非.NET Framework吗?原因是什么?

Jeff: 是的,我就是这样做的!服务器端性能是我做出选择的一个主要原因。另一个主要原因是MVC和WebAPI控制器的整合。对我而言,具有两个独立的代码库是毫无意义的。第三个原因是标签助手(Tag Helpers)。我希望我的HTML看上去尽可能更像是HTML。我一向不喜欢 @Html.ActionLink(“Which param is this”, “Or this”, “Wait What Is This One Again”, new { @class = "OhComeOnYouMustBeKidding"}) 这样的风格。

添加CSS类绝对是一个最好的做法。我非常喜欢这样的风格:

<a asp-controller=”book” asp-action=”edit” class=”MyCSS”>Edit</a>

Jeremy:当然是的,并且我们已经这样做了。主要原因在于.NET Core对于更多的主机和开发选项而言是跨平台的。

David:我会选择.NET Core而非.NET Framework。对我来说,这个选择非常简单,因为我没有开发任何新的WinForms、WPF、WCF或ASP.NET WebForms应用。我很高兴使用Microsoft提供的最新的、最伟大的技术。到目前为止,我唯一期望的就是能看到即将推出的SignalR。在我看来,进步是直截了当的,这是朝着正确方向迈出的一步。我唯一关心的问题是关于.NET Core的可用性。只有一个选项是有点令人沮丧。事实上,我宁愿Microsoft只是声明我们现在需要全部使用.NET Core,并且可以具有以.NET Framework为目标的TFM(目标框架名字对象,Target Framework Moniker)。

Mark:对于一个新的项目,我绝对会默认使用.NET Core。最显著的原因在于.NET Core应用性能的提高和占用空间的减少,这意味着无论是对于云还是私有数据中心,可真正做到在基础架构上的成本节省。我主要从事Web和后端服务开发,能够使用Docker和Kubernetes等容器编排工具跨平台开发和部署应用,这是一项真正的优势。对于具有WPF、UWP或Xamarin移动组件的混合项目,使用.NET Standard可让开发人员在整个.NET或Xamarin项目与.NET Core Web或服务项目之间共享软件包。

Spencer:我的组织在.NET Framework上运作得很好,所以现在可能不会考虑.NET Core。但是我们希望在某个时候重新开发我们的平台。我们届时将会认真地考虑.NET Core。不必被锁定到基于Windows的托管,这是一件非常好的事情,但当前对我们并不是一个大问题!

InfoQ: 你们认为.NET Core的发展是否会超越Microsoft之外,还是会继续局限在现有的.NET开发者社区中?

Jeff:我希望如此。这是Microsoft首次有机会必须面对新一代的Web开发人员,这些开发人员认定必须使用Mac做开发。我在课堂上以VS Code入手讲授Core。尽管我越来越喜欢Code,但毫无疑问,完整的Visual Studio具有更高的生产率。目前为止在深入学习了ASP乃至Core之后,大多数从Mac或Linux入手的学员都会转向使用Windows。我们希望能改进非Windows、非Visual Studio开发人员的体验。

Jeremy:如果在TechEmpower趋势图上,基于ASP.Net Core的架构能保持攀升势头,情况或许会是如此。.Net Core必须要克服数十年来存在的一些关于Microsoft开发技术和文化的陈旧观念。

David:我认为.NET Core的发展已经超出Microsoft之外。从统计数字上看,.NET Core代码库事实上每天都会接受来自于非Microsoft雇员处的Pull请求。此外,.NET基金会有1700多家公司为.NET生态系统做出贡献,具有550多个以.NET为核心的源代码库!认真想来,这非常不同寻常。如果Microsoft不公开源代码,那么这些都是不可能的做到的。.NET开发人员社区与以往一样的强大。

Mark:我很希望看到.NET Core的发展壮大,吸引更多来自于其它生态系统的开发人员。它已具有大量的社区支持,似乎主要来于已有的.NET社区,尽管我们可以看到某些行业对此展示出越来越浓厚的兴趣。三星就是一个很好的例子。该企业已经在其Tizen操作系统中采用了.NET Core。我们很高兴看到Amazon和Google也已加强了对云平台的支持,包括提供很好的SDK支持。感觉Core项目像是一个开始,即更开放的Microsoft开始更积极地参与其它的社区。我希望该项目能继续发展,使得这些社区继续与Microsoft合作。

Spencer: 很难说。我认为信任是Microsoft在开源领域中存在的最大问题,但是他们已经取得了巨大的进步。Visual Studio Code就是一个例子,它对开源软件的各个方面都已产生了重大的影响。我认为时间会证明一切。

InfoQ:你们认为.NET Core在未来两年中将会如何发展?

Jeff: 我期望Core的发展轨迹能遵循我们所见的MVC发展的同一轨迹。起初,MVC由于与Web Forms存在一些迥异之处,因此并未受到Microsoft开发人员的喜爱。之后,在开发人员勉为其难地尝试之后,他们的态度发生了转变,进而开始喜欢使用它。现在,开发人员对Core的感受也是一样的。其中的一个巨大的差异之处在于,开发人员的MVC和WebAPI上技能可以得到更多的转换,大大地超过了可转换为MVC的Web Forms技能。

Jeremy:如果在以Netstandard 2.0为目标的项目中使用旧的.Net库是切实可行的,我认为更多的开发团队最终会跳到.Net Core。目前出于项目依赖性尚未针对Netstandard的顾虑,这些团队可能会犹豫不决。

David: 我并不认为.NET Core真的有什么特别之处。随着它越来越受欢迎,它将会得到日益广泛地采用。.NET Core的工具将变得更高效、无缺陷并且更为实用,进而提高开发人员的工作效率。我相信,.NET Core将成为.NET生态系统内新开发工作的一个行业标准。在ASP.NET Core中引入更好的SPA(单页面应用,Single Page Application)实例并非我的关注点。尽管据我所知,现在已有一些JavaScriptServices代码库,可以帮助开发人员构建Angular或React之类的项目,但我还是希望Microsoft能够涉足客户端框架。Microsoft已经给出了TypeScript,因此已在朝着正确的方向推进!

Mark:现在大企业客户开始认真考虑是否可对新项目使用.NET Core,这是我们当前所处的采纳曲线阶段。这种趋势将持续下去,并有望推动更广泛的生态系统向前发展。如果看一下.NET Core、ASP.NET Core、C#等一些项目的路线图,它们已经推出了一些非常令人惊奇的进展。其中的CoreRT是我最喜欢的一个项目,它为.NET提供了AoT编译,支持开发人员构建不带运行时依赖项的独立可执行文件。这些项目也增加了对WebAssembly的支持,支持开发人员编写并编译C#代码,在浏览器中执行复杂的处理。我非常期待看到未来的发展!

Spencer:增加一些与.NET Framework相对应的特性,可能将有助于推动.NET Standard的发展。

InfoQ:大家最后再谈谈看法?

Jeff:相比于推出新特性而言,长期稳定性将成为考虑采用Core时更看重的因素。Core正在接近于此。我是“长期支持版到当前版”模式(LTS vs Current Model)的坚定支持者,这种模式正被Node、Ubuntu等使用。从一个组织的角度考虑,我需要了解是否可以押注一种技术,该技术在必须要做出重大改变之前,至少会保持3到5年的稳定期。同时,我也需要知道该技术的创新也是在稳步推进的。

Jeremy:至少在Netstandard 2之前,.NET Core的杀手级问题就是,其在从.NET OSS生态系统分离出来时,如何避免出现像臭名昭著的Python 3发行版那样的问题。要实现完整的框架和.NET Core的多目标并非易事,这可能会成为OSS开发时的一个阻碍。

David:我一直惊讶于对.NET Core或ASP.NET Core闻所未闻的.NET开发人员数量。我相信Core是新Microsoft的一部分,作为开发人员肯定是要对此亦步亦趋的。在我的全部编程生涯中,这的确将成为一个我会讲述给孙辈们的创新经历,“令人记忆犹新的是,当年Microsoft同时推出了开放源代码和跨平台。他们将其称为.NET Core,孩子们,请不要介意这个名字”。的确,这是一个激动人心的时刻!

Mark:正如大家从我的谈话中可以看出,我是.NET Core的一位忠实粉丝。如果你正启动一个新的ASP.NET项目,你应该使用Core。它与.NET非常相似,所以你能很快就开始运行。它也是稳定的,并正得到一些开源的生态系统的支持。它只会变得更好。

讨论小组成员简介

2JeffAmmons-1526752517771.jpg Jeff Ammons 是 Code Career Academy 的首席讲师,在亚特兰大周边区域讲授Microsoft Stack和Node.js网页开发。Jeff具有Microsoft MVP和Pluralsight author认证,经常在用户组、一些聚会和会议上发表演讲。他曾就职于多家不同规模的公司,任开发人员达25年以上,职位从开发人员到首席软件架构师。 

2JeremyDMiller-1526752517185.jpg Jeremy Miller 是德克萨斯州奥斯丁市的一位开发人员和软件架构师,也是多个OSS工具的作者。他的个人博客是 jeremydmiller.com 。                                                                                                                       

2David_Pine-1526752517332.jpg David Pine 是位于威斯康星州的Centare公司的一位技术布道师,也是一名Microsoft MVP。David喜欢在技术社区分享知识,并在一些区域性会议、用户组和技术会议上做演讲。David热衷于通过写作来分享自己的想法,并积极维护着 个人博客

2mark-rendle-1526752517454.jpg Mark Rendle 是一位具有近30年行业经验的软件开发人员。他是一名自由顾问、培训师和开发人员,定期在世界各地的.NET Core、构建现代应用和服务相关的会议上演讲。 可在Twitter上关注Mark

2SpencerSchneidenbach-1526752517555.jpg Spencer Schneidenbach 是一位居住在密苏里州圣路易斯市的软件架构师、API/集成专家,也是一名Microsoft MVP。Spencer具有 个人博客

查看英文原文: Discussions on the Future of .NET Core


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK