.NET Core:新的快速开发平台
.NET Core?今年已經(jīng)發(fā)布了 2.0 版本了。技術(shù)雷達(dá)最近將 .NET Core 從“評(píng)估”移到了“試用”階段,意味著運(yùn)用這項(xiàng)技術(shù)的風(fēng)險(xiǎn)在不斷減小。本文將簡(jiǎn)要介紹基于 .NET Core 的快速開(kāi)發(fā)的方式。
.NET Core 產(chǎn)生于 2014年,是一個(gè)不折不扣的新開(kāi)發(fā)平臺(tái)。SmallTalk 的面向?qū)ο笤o軟件產(chǎn)業(yè)帶來(lái)革命,Ruby on Rails 曾經(jīng)用“約定勝于配置”的特性俘獲一片芳心,而到了編程平臺(tái)的競(jìng)爭(zhēng)白熱化的今天,全新的 .NET Core 又何以面世呢?說(shuō)起來(lái),其實(shí)它并沒(méi)有什么過(guò)人之處,只是總結(jié)了過(guò)去曾在 Windows 平臺(tái)大放異彩的經(jīng)驗(yàn),剔除了為人詬病的累贅,并吸收了大量現(xiàn)代開(kāi)發(fā)平臺(tái)的特性而打造的,用官方的話說(shuō),是“面向未來(lái)”的開(kāi)發(fā)平臺(tái)。甩掉了包袱,又站在巨人的肩上,自然能夠站得高,望得遠(yuǎn)的同時(shí),輕裝上路、跑步前進(jìn)了。
快速開(kāi)始
在網(wǎng)站上下載了 SDK,之后通過(guò)一個(gè)命令就可以快速創(chuàng)建一個(gè)簡(jiǎn)單的 .NET Core 應(yīng)用程序了:
使用任意文本編輯器編寫(xiě)完成代碼之后,再執(zhí)行一條命令就可以運(yùn)行程序了:
dotnet run? ?
是不是很容易上手?
對(duì)于現(xiàn)代開(kāi)發(fā)平臺(tái)來(lái)說(shuō),包管理是必不可少的功能。.NET Core 內(nèi)置了 nuget 包管理能力,包括安裝卸載,以及打包和發(fā)布等功能都內(nèi)置提供了。如果需要安裝一個(gè)依賴(lài),也是執(zhí)行一個(gè)命令:
dotnet add package Newtonsoft.Json單元測(cè)試?為項(xiàng)目使用 dotnet new xunit 添加上單元測(cè)試項(xiàng)目之后,執(zhí)行 dotnet test 即可執(zhí)行測(cè)試:
dotnet test真正開(kāi)發(fā)應(yīng)用程序的時(shí)候,我們需要一款順手的編輯器。——以前在 Windows 上做 .NET 的時(shí)候,宇宙第一 IDE Visual Studio 是標(biāo)配,尤其是在它提供了免費(fèi)的完整版本之后更是如此。但跨平臺(tái)的 .NET Core 可不再需要 Visual Studio 這種龐然大物了——雖然我承認(rèn)用 Visual Studio 的人仍然是幸福的,而且?Mac 版本?也有了,但對(duì)于輕量級(jí)的快速開(kāi)發(fā)來(lái)說(shuō)始終還是個(gè)頭太大了。
重點(diǎn)來(lái)了,基于 .NET Core 的開(kāi)發(fā)甚至都不需要一個(gè) IDE,可以使用任何文本編輯器進(jìn)行。比如上面截圖中的 vim。如果給 vim 安裝上插件,還可以直接在 vim 里體驗(yàn) IDE 里一樣的高級(jí)開(kāi)發(fā)功能,比如自動(dòng)完成、查找引用等。不錯(cuò),這正是利用了技術(shù)雷達(dá)中介紹的另一項(xiàng)技術(shù)來(lái)實(shí)現(xiàn)的:語(yǔ)言服務(wù)器協(xié)議。借助這項(xiàng)技術(shù),Sublime Text 及 Visual Studio Code 等一眾編輯器都可以作為 .NET Core 開(kāi)發(fā)環(huán)境了!
開(kāi)源標(biāo)準(zhǔn)
用過(guò)微軟技術(shù)的人都對(duì)它的封閉性有一定的擔(dān)心,畢竟他曾經(jīng)做過(guò)不少把好技術(shù)葬送在自己平臺(tái)上的事情,比如 WPF。不過(guò)近年來(lái)微軟推出不少良心作品都廣受好評(píng),比如 Visual Studio Code 和 TypeScript。那么這里介紹的 .NET Core 可以說(shuō)是另一個(gè)良心之作了,從2014 年宣布開(kāi)源之后,.NET Core 本身的所有開(kāi)發(fā)工作都是開(kāi)源的,定時(shí)與社區(qū)更新計(jì)劃和狀態(tài),及時(shí)與網(wǎng)友交互討論問(wèn)題,從2016年發(fā)布1.0版本到現(xiàn)在,已經(jīng)發(fā)布了2.0版本,增加了大量的 API。
有意思的是,.NET Core 里不少實(shí)踐都采用社區(qū)中已經(jīng)約定俗成的模式,即使有對(duì)應(yīng)的“微軟風(fēng)格”存在,甚至即使 Windows 上的 .NET 已經(jīng)使用過(guò)的模式也不再兼容。從前面的演示可以看到,.NET Core 的開(kāi)發(fā)流程與我們熟悉的 node.js 和 Ruby 等開(kāi)發(fā)平臺(tái)并沒(méi)有什么不同,一個(gè)已經(jīng)接觸過(guò)其他現(xiàn)代化開(kāi)發(fā)平臺(tái)的工程師,新來(lái)接觸 .NET Core,會(huì)顯得毫無(wú)違合感。因此 .NET Core 可以稱(chēng)得上是一種標(biāo)準(zhǔn)的開(kāi)發(fā)平臺(tái)。
說(shuō)到標(biāo)準(zhǔn),微軟本來(lái)是制定過(guò)很多標(biāo)準(zhǔn)的,從時(shí)區(qū)格式、字體格式到命令行格式、文本編碼等都有他的標(biāo)準(zhǔn)存在。這次,.NET Core 在各方面都選擇了社區(qū)標(biāo)準(zhǔn),而非微軟標(biāo)準(zhǔn)。比如下面這條命令行參數(shù),是?GNU 風(fēng)格,而不是?Windows 風(fēng)格:
dotnet help --help其他方面,包括積極使用 JSON 和 yml 配置文件,以及語(yǔ)義版本化等,都是目前社區(qū)項(xiàng)目的典型實(shí)踐,.NET Core 也都采用社區(qū)做法。在跨平臺(tái)成為基本要求的年代,.NET Core 也不無(wú)意外地默認(rèn)提供。.NET Core 運(yùn)行時(shí)在 GitHub 的?CI 狀態(tài)?如下,我們可以看到它默認(rèn)提供大量平臺(tái)的兼容性:
種種跡象表明,這次 .NET Core 確實(shí)是真心實(shí)意地在為社區(qū)提供標(biāo)準(zhǔn)化跨平臺(tái)開(kāi)發(fā)工具。由于采用了 MIT 協(xié)議,因此幾乎可以隨意使用其源代碼和生成物。
博采眾長(zhǎng)
在這個(gè)普遍用“借鑒”來(lái)指代“抄襲”的年代,不抄點(diǎn)都不好意思了。據(jù)說(shuō) .NET 出現(xiàn)的時(shí)候,關(guān)于它與 Java 相互抄襲的說(shuō)法就不絕于耳。不過(guò)時(shí)過(guò)境遷,不管是誰(shuí)抄誰(shuí),這一仗算是 Java 完勝了。但 Java 步伐的緩慢也是眾所周之的,Java 平臺(tái)上的一些問(wèn)題,使得 Kotlin、Groovy 和 Scala 等 JVM 上的兼容語(yǔ)言大光異彩。.NET 之所以能保持獨(dú)立發(fā)展,除了用的人沒(méi)有 Java 多、以及社區(qū)本身就沒(méi)那么活躍之外,最大的原因其實(shí)是它本身已經(jīng)比較完善了。
.NET Core 直接從 C# 7 開(kāi)始支持。C# 語(yǔ)法的優(yōu)雅性是從來(lái)沒(méi)有人懷疑過(guò)的。比如,在我們談?wù)?Java 10 將增加隱式類(lèi)型推導(dǎo)的時(shí)候,C# 這個(gè)功能已經(jīng)存在了 10 年之久。其他的也就不一一列舉了,本文并非意在引戰(zhàn)。下面來(lái)看一段用 C# 并行異步調(diào)用 API,并進(jìn)行異常處理和空值處理的例子:
可以看出,C# 的高級(jí)語(yǔ)法特性讓我們更關(guān)注邏輯本身,而諸如多線程、級(jí)聯(lián)的異步操作、異步操作的異常捕獲,以及空值處理等“技術(shù)上”的操作都交由語(yǔ)言本身來(lái)完成。語(yǔ)法的直觀已經(jīng)脫離了語(yǔ)法糖的意義,當(dāng)大量這種語(yǔ)法糖的效果累加到一起之后,它就可以成為新的開(kāi)發(fā)模式。在上面的例子里,在輕松地對(duì)集合進(jìn)行異步化、并行化之后,我們將異步操作嵌入了函數(shù)式的操作步驟中。類(lèi)似這樣的語(yǔ)法能夠釋放開(kāi)發(fā)人員的創(chuàng)造力,提高軟件的質(zhì)量。另外,.NET Core 還支持函數(shù)式編程語(yǔ)言 F#。
在 .NET Core 里開(kāi)發(fā) Web 應(yīng)用時(shí),使用 Kestrel 可以直接使用自宿主的 Web 服務(wù)器,這與 Spring Boot 的機(jī)制完全一樣。而在 Web 應(yīng)用中,最簡(jiǎn)單的 Web 程序只需要一行代碼——也 node.js 的簡(jiǎn)潔性何其相似,另一方面它還使用源于 Rails 的約定勝于配置理念來(lái)構(gòu)建 Web 應(yīng)用。
下面是一個(gè)極簡(jiǎn)的 .NET Core 的 Web 應(yīng)用的例子:
最后,.NET Core 作為 .NET 的開(kāi)源版本,自然是會(huì)繼承 .NET 本身十幾年的發(fā)展成果的。因此,包括 nuget 在線上的大量資源,以及以前適用于 .NET 的各種技術(shù),都適用于 .NET Core。比如 LINQ、Rx,以及 Entity Framework 等技術(shù),不過(guò)它們很可能由于重新進(jìn)行了實(shí)現(xiàn),所以可能有了新的名字。值得注意的是,在這個(gè)過(guò)程中,也有不少老舊的技術(shù)是因?yàn)闀r(shí)代已經(jīng)不再需要它們了,所以不會(huì)再提供了,比如 WCF、Windows Forms。
面向未來(lái)
現(xiàn)在這個(gè)人人講云原生和微服務(wù)的時(shí)代,.NET Core 要想標(biāo)榜是面向未來(lái)的開(kāi)發(fā)技術(shù),就得有一些真本事才行。
在微服務(wù)開(kāi)發(fā)領(lǐng)域,它提供自宿主(self-hosted)的命令行 Web 應(yīng)用,能以自包含(self contained)的形式直接與 .NET Core 運(yùn)行時(shí)一起發(fā)布。對(duì)操作系統(tǒng)以及系統(tǒng)中需要安裝的軟件幾乎沒(méi)什么特別的依賴(lài)(以前的 ASP.NET?應(yīng)用一般需要 IIS、Jexus)。.NET Core 天生的跨平臺(tái)能力又讓它與容器技術(shù)可以無(wú)縫結(jié)合,既可以支持?Linux 容器,也可以支持?Windows 容器。所以服務(wù)器環(huán)境不管是虛擬機(jī),還是 Docker Swarm、Kubernetes、Service Fabric 之類(lèi)的云原生(Cloud Native)容器環(huán)境,它完全不挑。而在應(yīng)用層面,.NET Core 應(yīng)用可以用其他社區(qū)用的工具體系(比如 zookeeper、Consul、Kafka、ELK、OpemAM),也可以用 .NET 社區(qū)中踴現(xiàn)出來(lái)的一批新的工具(如 Ocelot、Polly、Exceptionless、IdentityServer)等。開(kāi)發(fā)體驗(yàn)方面,跨平臺(tái)開(kāi)發(fā)環(huán)境、包管理,以及云端持續(xù)集成等現(xiàn)代化應(yīng)用開(kāi)發(fā)的特性都已經(jīng)完備。
說(shuō)到面向未來(lái)的具體體現(xiàn),就可以細(xì)數(shù)一些人們都在關(guān)注的方向了,比如 Web Assembly、無(wú)服務(wù)器和 IoT 等。ASP.NET Core 團(tuán)隊(duì)正在投放?Blazor 項(xiàng)目的開(kāi)發(fā),旨在將 .NET Core 代碼帶到瀏覽器中,目前已經(jīng)取得一定進(jìn)展。可以在這埋在看到實(shí)際樣例 Demo。無(wú)服務(wù)器技術(shù)本身是對(duì)云資源的再一次抽象,以達(dá)到對(duì)應(yīng)用進(jìn)行隨時(shí)啟停的目的。.NET Core 能與容器技術(shù)很好地兼容,本身又足夠輕量級(jí),所以它與無(wú)服務(wù)器技術(shù)的結(jié)合也就很自然而然了。目前?Azure?和?AWS?都已經(jīng)推出了 .NET Core 的無(wú)服務(wù)器應(yīng)用環(huán)境。在一個(gè)不顯眼的網(wǎng)頁(yè),.NET Core 官方宣布,其運(yùn)行時(shí)支持 ARM 架構(gòu) CPU,可以運(yùn)行于樹(shù)莓派等設(shè)備上,這為 .NET Core 在 IoT 設(shè)備上運(yùn)行掃清了障礙。
這兩年,伴隨著人工智能技術(shù)的走熱,Python 也越來(lái)越被人們熟知,這正是由于它一直以來(lái)在這個(gè)領(lǐng)域的大量積累才獲得的成就。在可以預(yù)見(jiàn)的未來(lái)里,.NET Core 作為一種通用性的開(kāi)發(fā)平臺(tái),也必將以?xún)?yōu)雅的姿態(tài)被運(yùn)用到更多領(lǐng)域的開(kāi)發(fā)中去。?
結(jié)論
有人說(shuō),微軟的東西,到了2.0版本才敢用,原因是 1.0 版的時(shí)候還只是個(gè)原型,可能太簡(jiǎn)陋又可能被砍掉(或者改名)。而一般2.0 版本就代表了穩(wěn)定:已經(jīng)投入了精力去打造,并且仍會(huì)繼續(xù)投資的產(chǎn)品。所以開(kāi)發(fā)者可以放心地把 .NET Core 用于生產(chǎn)環(huán)境了。在微服務(wù)環(huán)境中,由于服務(wù)體積小,迭代周期短,開(kāi)發(fā)過(guò)程的快速就特別重要了。作為一款優(yōu)雅、高效,具有廣泛兼容性的靜態(tài)開(kāi)發(fā)平臺(tái),.NET Core 必然會(huì)成為微服務(wù)主要開(kāi)發(fā)平臺(tái)之一。
與以往典型的微軟開(kāi)發(fā)平臺(tái)不同的是,.NET Core 是一個(gè)新產(chǎn)品,有點(diǎn)像騰訊微信之于騰訊 QQ,因此相信 .NET Core 會(huì)是一個(gè)不同于過(guò)往的版本,它會(huì)更開(kāi)放,更現(xiàn)代化。對(duì)于以前就有 .NET 開(kāi)發(fā)經(jīng)驗(yàn)的人來(lái)說(shuō),這無(wú)疑是一個(gè)更新開(kāi)發(fā)方式的好機(jī)會(huì),而對(duì)于還沒(méi)有深入了解的人來(lái)說(shuō),可以拿出幾分鐘小試一下。
相關(guān)文章:?
.NET:持續(xù)進(jìn)化的統(tǒng)一開(kāi)發(fā)平臺(tái)
.NET Core 2.1路線圖
原文地址 :https://blog.jijiechen.com/post/netcore-a-new-platform-for-fast-development
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core:新的快速开发平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 农行基于TFS工具的敏捷转型实践
- 下一篇: asp.net ajax控件工具集 Au