.NET Core:新的快速开发平台

.NET Core 今年已经发布了 2.0 版本了。技术雷达最近将 .NET Core 从“评估”移到了“试用”阶段,意味着运用这项技术的风险在不断减少。本文将简要介绍基于 .NET Core 的快速开发的方式。node

.NET Core 产生于 2014年,是一个彻彻底底的新开发平台。SmallTalk 的面向对象曾给软件产业带来革命,Ruby on Rails 曾经用“约定胜于配置”的特性俘获一片芳心,而到了编程平台的竞争白热化的今天,全新的 .NET Core 又何以面世呢?提及来,其实它并无什么过人之处,只是总结了过去曾在 Windows 平台大放异彩的经验,剔除了为人诟病的累赘,并吸取了大量现代开发平台的特性而打造的,用官方的话说,是“面向将来”的开发平台。甩掉了包袱,又站在巨人的肩上,天然可以站得高,望得远的同时,轻装上路、跑步前进了。编程


快速开始

在网站上下载了 SDK,以后经过一个命令就能够快速建立一个简单的 .NET Core 应用程序了:vim


dotnet new console

640?wx_fmt=png&wxfrom=5&wx_lazy=1


使用任意文本编辑器编写完成代码以后,再执行一条命令就能够运行程序了:浏览器

dotnet run

640?wx_fmt=png&wxfrom=5&wx_lazy=1   640?wx_fmt=png


是否是很容易上手?服务器

对于现代开发平台来讲,包管理是必不可少的功能。.NET Core 内置了 nuget 包管理能力,包括安装卸载,以及打包和发布等功能都内置提供了。若是须要安装一个依赖,也是执行一个命令:微信

dotnet add package Newtonsoft.Json

640?wx_fmt=png


单元测试?为项目使用 dotnet new xunit 添加上单元测试项目以后,执行 dotnet test 便可执行测试:多线程

dotnet test

640?wx_fmt=png


真正开发应用程序的时候,咱们须要一款顺手的编辑器。——之前在 Windows 上作 .NET 的时候,宇宙第一 IDE Visual Studio 是标配,尤为是在它提供了免费的完整版本以后更是如此。但跨平台的 .NET Core 可再也不须要 Visual Studio 这种庞然大物了——虽然我认可用 Visual Studio 的人仍然是幸福的,并且 Mac 版本 也有了,但对于轻量级的快速开发来讲始终仍是个头太大了。架构

重点来了,基于 .NET Core 的开发甚至都不须要一个 IDE,可使用任何文本编辑器进行。好比上面截图中的 vim。若是给 vim 安装上插件,还能够直接在 vim 里体验 IDE 里同样的高级开发功能,好比自动完成、查找引用等。不错,这正是利用了技术雷达中介绍的另外一项技术来实现的:语言服务器协议。借助这项技术,Sublime Text 及 Visual Studio Code 等一众编辑器均可以做为 .NET Core 开发环境了!less

640?wx_fmt=png



开源标准

用过微软技术的人都对它的封闭性有必定的担忧,毕竟他曾经作过很多把好技术葬送在本身平台上的事情,好比 WPF。不过近年来微软推出很多良心做品都广受好评,好比 Visual Studio Code 和 TypeScript。那么这里介绍的 .NET Core 能够说是另外一个良心之做了,从2014 年宣布开源以后,.NET Core 自己的全部开发工做都是开源的,定时与社区更新计划和状态,及时与网友交互讨论问题,从2016年发布1.0版本到如今,已经发布了2.0版本,增长了大量的 API。异步

有意思的是,.NET Core 里很多实践都采用社区中已经约定俗成的模式,即便有对应的“微软风格”存在,甚至即便 Windows 上的 .NET 已经使用过的模式也再也不兼容。从前面的演示能够看到,.NET Core 的开发流程与咱们熟悉的 node.js 和 Ruby 等开发平台并无什么不一样,一个已经接触过其余现代化开发平台的工程师,新来接触 .NET Core,会显得毫无违合感。所以 .NET Core 能够称得上是一种标准的开发平台。

说到标准,微软原本是制定过不少标准的,从时区格式、字体格式到命令行格式、文本编码等都有他的标准存在。此次,.NET Core 在各方面都选择了社区标准,而非微软标准。好比下面这条命令行参数,是 GNU 风格,而不是 Windows 风格:

dotnet help --help

640?wx_fmt=png


其余方面,包括积极使用 JSON 和 yml 配置文件,以及语义版本化等,都是目前社区项目的典型实践,.NET Core 也都采用社区作法。在跨平台成为基本要求的年代,.NET Core 也不无心外地默认提供。.NET Core 运行时在 GitHub 的 CI 状态 以下,咱们能够看到它默认提供大量平台的兼容性:

640?wx_fmt=png


种种迹象代表,此次 .NET Core 确实是真心实意地在为社区提供标准化跨平台开发工具。因为采用了 MIT 协议,所以几乎能够随意使用其源代码和生成物。


博采众长

在这个广泛用“借鉴”来指代“抄袭”的年代,不抄点都很差意思了。听说 .NET 出现的时候,关于它与 Java 相互抄袭的说法就不绝于耳。不过期过境迁,无论是谁抄谁,这一仗算是 Java 完胜了。但 Java 步伐的缓慢也是众所周之的,Java 平台上的一些问题,使得 Kotlin、Groovy 和 Scala 等 JVM 上的兼容语言大光异彩。.NET 之因此能保持独立发展,除了用的人没有 Java 多、以及社区自己就没那么活跃以外,最大的缘由实际上是它自己已经比较完善了。


.NET Core 直接从 C# 7 开始支持。C# 语法的优雅性是历来没有人怀疑过的。好比,在咱们谈论 Java 10 将增长隐式类型推导的时候,C# 这个功能已经存在了 10 年之久。其余的也就不一一列举了,本文并不是意在引战。下面来看一段用 C# 并行异步调用 API,并进行异常处理和空值处理的例子:

640?wx_fmt=png


能够看出,C# 的高级语法特性让咱们更关注逻辑自己,而诸如多线程、级联的异步操做、异步操做的异常捕获,以及空值处理等“技术上”的操做都交由语言自己来完成。语法的直观已经脱离了语法糖的意义,当大量这种语法糖的效果累加到一块儿以后,它就能够成为新的开发模式。在上面的例子里,在轻松地对集合进行异步化、并行化以后,咱们将异步操做嵌入了函数式的操做步骤中。相似这样的语法可以释放开发人员的创造力,提升软件的质量。另外,.NET Core 还支持函数式编程语言 F#。


在 .NET Core 里开发 Web 应用时,使用 Kestrel 能够直接使用自宿主的 Web 服务器,这与 Spring Boot 的机制彻底同样。而在 Web 应用中,最简单的 Web 程序只须要一行代码——也 node.js 的简洁性何其类似,另外一方面它还使用源于 Rails 的约定胜于配置理念来构建 Web 应用。

下面是一个极简的 .NET Core 的 Web 应用的例子:

640?wx_fmt=png


最后,.NET Core 做为 .NET 的开源版本,天然是会继承 .NET 自己十几年的发展成果的。所以,包括 nuget 在线上的大量资源,以及之前适用于 .NET 的各类技术,都适用于 .NET Core。好比 LINQ、Rx,以及 Entity Framework 等技术,不过它们极可能因为从新进行了实现,因此可能有了新的名字。值得注意的是,在这个过程当中,也有很多老旧的技术是由于时代已经再也不须要它们了,因此不会再提供了,好比 WCF、Windows Forms。

面向将来

如今这我的人讲云原生和微服务的时代,.NET Core 要想标榜是面向将来的开发技术,就得有一些真本事才行。

在微服务开发领域,它提供自宿主(self-hosted)的命令行 Web 应用,能以自包含(self contained)的形式直接与 .NET Core 运行时一块儿发布。对操做系统以及系统中须要安装的软件几乎没什么特别的依赖(之前的 ASP.NET 应用通常须要 IIS、Jexus)。.NET Core 天生的跨平台能力又让它与容器技术能够无缝结合,既能够支持 Linux 容器,也能够支持 Windows 容器。因此服务器环境无论是虚拟机,仍是 Docker Swarm、Kubernetes、Service Fabric 之类的云原生(Cloud Native)容器环境,它彻底不挑。而在应用层面,.NET Core 应用能够用其余社区用的工具体系(好比 zookeeper、Consul、Kafka、ELK、OpemAM),也能够用 .NET 社区中踊现出来的一批新的工具(如 Ocelot、Polly、Exceptionless、IdentityServer)等。开发体验方面,跨平台开发环境、包管理,以及云端持续集成等现代化应用开发的特性都已经完备。

说到面向将来的具体体现,就能够细数一些人们都在关注的方向了,好比 Web Assembly、无服务器和 IoT 等。ASP.NET Core 团队正在投放 Blazor 项目的开发,旨在将 .NET Core 代码带到浏览器中,目前已经取得必定进展。能够在这埋在看到实际样例 Demo。无服务器技术自己是对云资源的再一次抽象,以达到对应用进行随时启停的目的。.NET Core 能与容器技术很好地兼容,自己又足够轻量级,因此它与无服务器技术的结合也就很天然而然了。目前 Azure 和 AWS 都已经推出了 .NET Core 的无服务器应用环境。在一个不显眼的网页,.NET Core 官方宣布,其运行时支持 ARM 架构 CPU,能够运行于树莓派等设备上,这为 .NET Core 在 IoT 设备上运行扫清了障碍。


这两年,伴随着人工智能技术的走热,Python 也愈来愈被人们熟知,这正是因为它一直以来在这个领域的大量积累才得到的成就。在能够预见的将来里,.NET Core 做为一种通用性的开发平台,也必将以优雅的姿态被运用到更多领域的开发中去。 

结论

有人说,微软的东西,到了2.0版本才敢用,缘由是 1.0 版的时候还只是个原型,可能太简陋又可能被砍掉(或者更名)。而通常2.0 版本就表明了稳定:已经投入了精力去打造,而且仍会继续投资的产品。因此开发者能够放心地把 .NET Core 用于生产环境了。在微服务环境中,因为服务体积小,迭代周期短,开发过程的快速就特别重要了。做为一款优雅、高效,具备普遍兼容性的静态开发平台,.NET Core 必然会成为微服务主要开发平台之一。

与以往典型的微软开发平台不一样的是,.NET Core 是一个新产品,有点像腾讯微信之于腾讯 QQ,所以相信 .NET Core 会是一个不一样于过往的版本,它会更开放,更现代化。对于之前就有 .NET 开发经验的人来讲,这无疑是一个更新开发方式的好机会,而对于尚未深刻了解的人来讲,能够拿出几分钟小试一下。

相关文章: 

原文地址 :https://blog.jijiechen.com/post/netcore-a-new-platform-for-fast-development


 
 

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg