為什麼選擇ASP.NET Core

張飛洪[廈門]發表於2021-06-18

什麼是.NET

  有一次小飛去面試,面試官上來就問了一個巨集觀的問題:“你覺得什麼是.NET”?小飛的腦子嗡嗡的,支吾了半天,才吐了一些碎片化的詞語:“跨平臺、開源、微軟…”

雖然作為一個.NET人,但是小飛更喜歡編碼細節,對理論這一類不是很感興趣,比如.NET歷史枷鎖、什麼是.NET等。一個源於技術更新發展太快,另外一個原因是小飛覺得技術以實用為主,聊這些虛頭巴腦的理論沒有什麼用。

考官點評了:“你對.NET缺乏基本的瞭解,作為.NET技術的運用者,對問題缺少刨根問底的思考,我們要招聘的是面向未來,有系統性思維的人。”

面試讓小飛很受挫,於是他去找小黑,一個.NET方面的老司機。

“小黑,你在.NET這方面比較資深,到底什麼是.NET呢?”

小黑知道小飛比較好學:“小飛,你先不用難過,這次面試反過來也是對自己知識的查缺補漏。”小黑一邊安慰,一邊回答道:“你可以這麼思考,假如你是微軟的產品經理,你會如何規劃.NET呢?”

小飛搖搖頭:“我只是一個菜鳥,初出江湖,哪裡有這個高度。”

小黑道:“嗯,沒關係,就是一個思考角度罷了。你可以這麼思考,微軟就像一個主廚,做了一桌滿漢全席,上面有八大菜系:有網頁,移動,桌面,微服務,遊戲,機器學習,雲原生,物聯網。”

 

“微軟不但提供桌子這個平臺,而且上面的每道菜系怎麼做,用什麼材料做,如何打樣都提供了周到的說明。更貼心的是,微軟對開源社群說:我的滿漢全席大家隨便吃,隨便拿,不要錢,因為我採用的是最寬鬆的MIT協議。”

 

小飛:“我知道以前很多人對微軟帝國有很多偏見,都說微軟不開源。”

小黑:“這次微軟是真的放下架子,徹底擁抱開源了。”

小飛對大廚的比喻很深刻,不禁唸叨:“.NET、滿漢全席,八大菜系,各具特色,不要錢。”

小黑看到小飛碎碎念,就幫他做了一個概括:“是的,.NET是一個可構建各種應用(八大菜系)的跨平臺的開源的開發平臺。”

小黑繼續展開解釋道:“構建各種應用,說明.NET具有多面手的能力,好比班上的三好生,雖然在某個科目上無法做到最優秀,但是每一門功課幾乎都沒有短板。也就是說學好了.NET一種技術平臺就可以應對各種商業場景的開發,這對中小團隊是非常友好的。”

 

小飛不解的問:“為什麼說對小團隊非常友好?”

小黑:“你想,如果你用Java做Web開發,後續做桌面開發怎麼辦?Java在桌面端開發是沒有優勢的,如果你用Dart開發移動端,後續想做物聯網開發怎麼辦?這對中小企業是很不友好的,因為他們不可能像大企業那樣,為了極致的選型,可以養一批不同技術棧的人員。”

小飛琢磨了一下,好像是這麼回事。

.NET發展和規劃

小飛對.NET的發展不是很感興趣,但是從事.NET技術開發又撇不開它,所以索性就去請教了前輩小黑。

小黑給了他一張版本演化圖:

 “你看到什麼規律了沒?”

小黑認真的回覆到:“從以下.NET Core發展歷史,我們可以看到它的發展的進度非常快,微軟會每隔一年釋出一個版本,有時候還不止一個,注意看,版本號為奇數的是普通版本,版本號為偶數的為長期支援版本(LTS),我們要關注LTS版本,一般長期支援時間為三年,所以我們選型版本的時候儘量以LTS版本為準”。

“原來如此,還是有一點講究在裡面啊。”

在小飛感嘆的時候,小黑繼續叨叨:“在未來.NET只有一個平臺,就是現在.NET Core演化過去的.NET,而不會有.NET Framework的版本,.NET Core會在.NET 5.0這個版本上對新舊版本進行統一,所以未來從.NET 5.0到7.0都會叫.NET而不是叫.NET Core,而且統一名稱後,微軟會定義在每年的11月份進行新版本釋出。”

“不知道你留意沒有,這裡為什麼沒有4.0的版本?”小黑故意停頓了一下。

“是啊,我剛才沒有注意看,確實版本號有斷檔。”小飛撓了撓頭。

“原因是當前.NET Framework為4.8版本,所以二者如果要融合的話,就不能起一個版本衝突的4.X的名字。”

“明白,非常感謝!”,小飛對.NET的歷史和未來有了更加深刻的理解。

ASP.NET Core的特點

聊了.NET的前世今生,小飛若有所獲,但是對ASP.NET這個傢伙,有點迷惑,到底什麼是ASP.NET呢?

小飛故意查了一下ASP的全稱,ASP(Activity Server Page活動伺服器網頁),回想之前看到的ML.NET和Azure.NET,小飛若有所思:ASP.NET應該就是用來開發Web應用的子框架了。

就在小飛得意之時,小黑突然微弱地問了一句:“你知道ASP.NET和ASP.NET Core有什麼區別嗎?”

“卡殼中……”

小黑像個佈道師一樣繼續說道:“別看他們二者很像,其實骨子裡是兩套完全不同的設計框架。除了效能提高之外,關鍵是新架構採用了元件化的設計理念。”

“元件化是個好東西,而且也聽得多了,但是這裡的元件化具體是什麼意思,為什麼要元件化呢?”小飛發現自己對ASP.NET Core的認知還很膚淺,小黑的話給了他很多觸發,也產生了更多的疑問。

小黑解釋道:“元件化借鑑的是樂高思想,它的核心是複用。比如,我們可以用有限的樂高元件拼裝出各種栩栩如生的玩具。同樣,我們可以複用ASP.NET的元件,比如依賴注入、配置框架、選項框架、日誌框架、HTTP中介軟體等,像流水線一樣拼裝出各種我們想要的Web應用,這裡有個高大上的名稱叫控制反轉,扯得有點遠,我們後面再聊。”

 “嗯,你的比喻非常形象,樂高確實有很強的複用性。而且,我看每個小孩幾乎都會玩,而且可以無限擴充套件。”

“是的,元件化還有易擴充套件的特點,不知道你發現了沒有,小孩玩樂高是越玩越得心應手,一旦你對ASP.NET的各個元件熟悉之後,我相信你也可以快速生產各種應用了。”

小飛在心中默默的唸叨:ASP.NET Core、樂高、易複用、易擴充套件。

小黑又進一步問道:“好的框架,除了以上,還應該具備哪些特點嗎?”

小飛腦子又嗡嗡起來:“這可是架構師要考慮的,我無論如何也想不出來啊。我只知道以前很多人選擇Java都說因為Java跨平臺。現在很多鍾情Go,因為容器化、易部署。”

“對了,你說出了兩個很重要的關鍵詞,跨平臺、易部署,這個.NET也考慮到了。”

小黑很興奮,聲音有點大。

“雖然微軟的開源來得有點晚,很多人對他的過往獨裁有成見,但這次開源確實也是很給力,C#也已經擺脫Windows系統的限制,不但支援Mac OS和Linux,而且對容器化(Docker),微服務、容器編排(Kubernetes)等技術的支援非常友好,這很好地順應了雲原生的未來趨勢。”

很多新概念在小飛的腦袋開始延伸開來……

“為什麼微服務和容器化關係這麼密切,我經常聽別人把這兩者放在一起?”

小黑:“你可以這麼思考,一旦服務的數量擴大為成百上千後會怎麼樣?”

小飛:“這麼多的服務,部署和運維會讓人抓狂吧?”

小黑:“對的,易部署和易運維也是ASP.NET Core的重要特點。”

一個新框架的誕生想不到背後有這麼多的設計理念,小飛繼續在心中唸叨一遍:ASP.NET Core、樂高、易複用、易擴充套件、跨平臺、易部署、易運維。

“小飛,別忘了,新架構如果效能不夠優異,其他的指標再好也沒人用的。”

“是哦,我經常聽老的.NET程式設計師聊過舊版ASP.NET首次載入很慢,不知道這次全新改版效能怎樣?”

“微軟在設計早期就將效能列為其重要的目標之一,根據效能測試網站Tech Empower的最新資料(Round18 2019-07-09),ASP.NET Core在雲伺服器規格下(Azure D3v2 instances)的Plaintext響應測試可達215 941次/秒,JSON序列化響應測試可達52 623次/秒,表現非常亮眼。”

小飛對測試資料沒有什麼感覺,但是感覺好像很快的樣子,小飛在腦子裡對這些特點畫了一幅腦圖:

 

 “小飛,你這幅腦圖應該再加一個圈,裡面填上…的省略號,他可不僅僅只有這些能力,很多內容我也沒用過呢。”

“還能有什麼能力,我感覺上面這些已經很高大上了啊?”

“我把其他的能力也列在下面,你可以看看。”

編後語: 

本人的.NET Core入門和實戰系列課程持續更新中,感謝您的捧場。

相關文章