.NET Core:新的快速開發平臺

.NET Core 今年已經發布了 3.0 版本了,鑑於其技術風險的不斷縮小,本文將對.NET Core 的快速開發的方式進行簡單的介紹。

.NET Core 發佈於2014年,是一個相對比較新的快速開發平臺。SmallTalk 的面向對象曾給軟件產業帶來革命,Ruby on Rails 曾經用“約定勝於配置”的特性俘獲一片芳心,而到了編程平臺的競爭白熱化的今天,全新的 .NET Core 又何以面世呢?說起來,其實它並沒有什麼過人之處,只是總結了過去曾在 Windows 平臺大放異彩的經驗,剔除了為人詬病的累贅,並吸收了大量現代開發平臺的特性而打造的,用官方的話說,是“面向未來”的開發平臺。甩掉了包袱,又站在巨人的肩上,自然能夠站得高,望得遠的同時,輕裝上路、跑步前進了。

快速開始

在網站上下載了 SDK,之後通過一個命令就可以快速創建一個簡單的 .NET Core 應用程序了:

dotnet new console

.NET Core:新的快速開發平臺

使用任意文本編輯器編寫完成代碼之後,再執行一條命令就可以運行程序了:

dotnet run

.NET Core:新的快速開發平臺


.NET Core:新的快速開發平臺

是不是很容易上手?

對於現代開發平臺來說,包管理是必不可少的功能。.NET Core 內置了 nuget 包管理能力,包括安裝卸載,以及打包和發佈等功能都內置提供了。如果需要安裝一個依賴,也是執行一個命令:

dotnet add package Newtonsoft.Json

.NET Core:新的快速開發平臺

單元測試?為項目使用 dotnet new xunit 添加上單元測試項目之後,執行 dotnet test 即可執行測試:

dotnet test

.NET Core:新的快速開發平臺

真正開發應用程序的時候,我們需要一款順手的編輯器。——以前在 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 開發環境了!

.NET Core:新的快速開發平臺

開源標準

用過微軟技術的人都對它的封閉性有一定的擔心,畢竟他曾經做過不少把好技術葬送在自己平臺上的事情,比如 WPF。不過近年來微軟推出不少良心作品都廣受好評,比如 Visual Studio Code 和 TypeScript。那麼這裡介紹的 .NET Core 可以說是另一個良心之作了,從2014 年宣佈開源之後,.NET Core 本身的所有開發工作都是開源的,定時與社區更新計劃和狀態,及時與網友交互討論問題,從2016年發佈1.0版本到現在,已經發布了3.0版本,增加了大量的 API。

有意思的是,.NET Core 裡不少實踐都採用社區中已經約定俗成的模式,即使有對應的“微軟風格”存在,甚至即使 Windows 上的 .NET 已經使用過的模式也不再兼容。從前面的演示可以看到,.NET Core 的開發流程與我們熟悉的 node.js 和 Ruby 等開發平臺並沒有什麼不同,一個已經接觸過其他現代化開發平臺的工程師,新來接觸 .NET Core,會顯得毫無違合感。因此 .NET Core 可以稱得上是一種標準的開發平臺。

說到標準,微軟本來是制定過很多標準的,從時區格式、字體格式到命令行格式、文本編碼等都有他的標準存在。這次,.NET Core 在各方面都選擇了社區標準,而非微軟標準。比如下面這條命令行參數,是 GNU 風格,而不是 Windows 風格:

dotnet help --help

.NET Core:新的快速開發平臺

其他方面,包括積極使用 JSON 和 yml 配置文件,以及語義版本化等,都是目前社區項目的典型實踐,.NET Core 也都採用社區做法。在跨平臺成為基本要求的年代,.NET Core 也不無意外地默認提供。.NET Core 運行時在 GitHub 的 CI 狀態 如下,我們可以看到它默認提供大量平臺的兼容性:

.NET Core:新的快速開發平臺

種種跡象表明,這次 .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,並進行異常處理和空值處理的例子:

.NET Core:新的快速開發平臺

可以看出,C# 的高級語法特性讓我們更關注邏輯本身,而諸如多線程、級聯的異步操作、異步操作的異常捕獲,以及空值處理等“技術上”的操作都交由語言本身來完成。語法的直觀已經脫離了語法糖的意義,當大量這種語法糖的效果累加到一起之後,它就可以成為新的開發模式。在上面的例子裡,在輕鬆地對集合進行異步化、並行化之後,我們將異步操作嵌入了函數式的操作步驟中。類似這樣的語法能夠釋放開發人員的創造力,提高軟件的質量。另外,.NET Core 還支持函數式編程語言 F#。

在 .NET Core 裡開發 Web 應用時,使用 Kestrel 可以直接使用自宿主的 Web 服務器,這與 Spring Boot 的機制完全一樣。而在 Web 應用中,最簡單的 Web 程序只需要一行代碼——也 node.js 的簡潔性何其相似,另一方面它還使用源於 Rails 的約定勝於配置理念來構建 Web 應用。

下面是一個極簡的 .NET Core 的 Web 應用的例子:

.NET Core:新的快速開發平臺

最後,.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 開發經驗的人來說,這無疑是一個更新開發方式的好機會,而對於還沒有深入瞭解的人來說,可以拿出幾分鐘小試一下。

載自:

CSDN - dotNET

LeaRun軟件快速開發平臺


分享到:


相關文章: