選擇一個好的框架一直是許多工程師爭論不休的議題。因為最近這一年來使用dotnet core有不少心得,想藉此整理一下。事實上,比較框架這件事是相對主觀的,在此就我個人觀點來闡述。之後若有時間會繼續寫一系列Dotnet Core的相關文章。

Dotnet Core的演進

老實說我本身並不喜歡微軟,直到聽到微軟要出一款開源的編輯器-VS Code,並且實際用了VS Code之後,真的發現輕量好用,目前已變成我主力的開發工具。這才讓我漸漸感受到微軟開始擁抱開源的決心。後來又收購GitHub,雖然當時很多人心裡怕怕的,時至今日看起來還好好的,沒出什麼事。後來工作之需使用了Dotnet Core,才慢慢了解Dotnet Core借鏡了許多優秀的框架,畢竟他是比較新的框架嘛!
說到這裡,讓我來科普一下Dotnet Core的歷史,它早在2014年微軟開始擁抱開源時,就開始計畫要將.Net體系開源出來,那時候會叫它Dotnet Core,是希望與當時的.Net Framework做區別。到了2016年六月Dotnet Core 1.0正式版Release,正式開始Dotnet Core的新紀元。

1

接下來的幾年我們可以看到微軟對Dotnet Core的重視,2017年出了Dotnet Core 2.0,2018出了Dotnet Core 2.1(LTS)長期維護版,2019出了Dotnet Core 3.1(LTS),2020開始Dotnet Core正式與.Net Framework合併成為.Net 5,之後每年都會升級一個版本,偶數版本都會是LTS版,由此可見微軟對Dotent(現在的.Net)支援與投入度頗高。

我認爲一個好的後端框架需要有的東東

後端框架百百種,當然最重要的是適切你的使用場景。有些時候只是簡單的API開發,就無需使用包羅萬象的框架。但依據我使用過的感覺與經驗,一個框架若有以下的特點,我認爲較能滿足:穩定度高,擴充性佳以及開發上手速度快等優勢。

  • 是否開源
  • 是否支援跨平台
  • 後台要夠硬
  • 集成依賴注入(DI)
  • 集成面向導向程式設計(AOP)
  • 是否支援中介軟體開發
  • 語言的效能與安全性
  • 第三方套件支援
  • 文件或網上資源豐富度

我將以上九點拆分為每三個一組,頭三個為框架穩定性指標,Dotnet Core開宗明義就是開源且跨平台,並且由微軟維護後台還不夠硬嗎!就好像為何大家會想去學Golang一樣,當然有很大一部分是因為Google當靠山啊。但關於跨平台我還是要說,若是你想要更近一步分析記憶體使用率,是否有記憶體洩漏的現象等等,或是你要用IDE來看source code,這些都只能乖乖使用Windows,對於這點拜託微軟不要再微軟了好嗎?
中間那三項為可擴充性,以一個大型的框架來說,基本上這三項最好是都能兼具,以Dotnet Core來說我可以給80分,因為原生就集成DI框架,並且將DI去蕪存菁,刪除了一些在Java Spring裡面艱深不易領會的用法。並且中間件開發容易且快速,就像寫NodeJS的中間件一樣爽快(這都仰賴於C#的優勢)。最後雖然Dotnet Core本身沒有支援AOP,但是有幾個出色的第三分套件可以讓你快速擴充,也算是滿足以上條件了。所以,以擴充性來說我給Dotnt Core滿高的評價。
最後三項為上手速度(學習曲線),Dotnet Core很大的優勢就語言使用C#,C#有強大的語法糖以及優秀的效能,光這點就已經打敗眾多敵手。但是後面兩點我覺得還需要許多的努力。以第三方套件來說,要使用官方推薦的Redis套件就只有一款可用,不像Java你想要功能強大還是輕量的任君挑選。最後就是文件與網上資源,Dotnet Core的官方文件算是齊全,很多時候讀線上的文件就會受益匪淺,但是若要深入可能就需要去買書來看,因為網上深入的資源相對少許多。當然,如果你已經有深厚的底子,入手Dotnet Core絕對如喝水一般。但我這邊是以一位junior的後端工程師來說,上手速度應該差不多在及格邊緣。

效能如何

最後來談談效能,這邊我直接用techempower這個網站所分析後端框架的Benchmarks來看。我簡單選出各語言中一個主流框架(大家有空可以自行上去玩),我找了Spring(Java)、Gin(Golang)、Express(NodeJS)、Laravel(PHP)、Rails(Ruby)來與Dotnet Core(C#)來比較一下。 最終總體比較如下圖:

2

很明顯前面13項都被Dotnet Core拿去(以碾壓的方式),並且離他最近的Gin也才獲得23%,再來應該是Express,接者是Spring,最後是Laravel和Rails。

我真的該用嗎?

目前Dotnet Core的趨勢我個人是非常看漲,但技術這種東西不要盲目的追捧,反倒是要審慎的考量再採取行動。其實你應該最清楚自己需要什麼,不是嗎?但又不給點意見好像也說不過去,以下我就分類三種開發者。

  • 本身已經是.Net背景卻沒用過或是對Dotnet Core不熟的開發者:那一定要好好學起來。
  • 若非.Net背景,但團隊裡有人用過C#或是願意嘗試者:在新專案的技術選型裡,我是覺得可以考慮直接用上。
  • 若還停留在新手村的開發者:還是老實地把目前的技術磨練好,慢慢打怪升等,況且往後的路還很長,你需要的是花時間在一項技術上的專研。

.Net系列文章