為什么選擇ASP.NET Core
什么是.NET
有一次小飛去面試,面試官上來就問了一個宏觀的問題:“你覺得什么是.NET”?小飛的腦子嗡嗡的,支吾了半天,才吐了一些碎片化的詞語:“跨平臺、開源、微軟…”
雖然作為一個.NET人,但是小飛更喜歡編碼細節,對理論這一類不是很感興趣,比如.NET歷史枷鎖、什么是.NET等。一個源于技術更新發展太快,另外一個原因是小飛覺得技術以實用為主,聊這些虛頭巴腦的理論沒有什么用。
考官點評了:“你對.NET缺乏基本的了解,作為.NET技術的運用者,對問題缺少刨根問底的思考,我們要招聘的是面向未來,有系統性思維的人。”
面試讓小飛很受挫,于是他去找小黑,一個.NET方面的老司機。
“小黑,你在.NET這方面比較資深,到底什么是.NET呢?”
小黑知道小飛比較好學:“小飛,你先不用難過,這次面試反過來也是對自己知識的查缺補漏?!毙『谝贿叞参浚贿吇卮鸬溃骸澳憧梢赃@么思考,假如你是微軟的產品經理,你會如何規劃.NET呢?”
小飛搖搖頭:“我只是一個菜鳥,初出江湖,哪里有這個高度。”
小黑道:“嗯,沒關系,就是一個思考角度罷了。你可以這么思考,微軟就像一個主廚,做了一桌滿漢全席,上面有八大菜系:有網頁,移動,桌面,微服務,游戲,機器學習,云原生,物聯網。”

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

小飛:“我知道以前很多人對微軟帝國有很多偏見,都說微軟不開源?!?/p>
小黑:“這次微軟是真的放下架子,徹底擁抱開源了。”
小飛對大廚的比喻很深刻,不禁念叨:“.NET、滿漢全席,八大菜系,各具特色,不要錢。”
小黑看到小飛碎碎念,就幫他做了一個概括:“是的,.NET是一個可構建各種應用(八大菜系)的跨平臺的開源的開發平臺?!?/p>
小黑繼續展開解釋道:“構建各種應用,說明.NET具有多面手的能力,好比班上的三好生,雖然在某個科目上無法做到最優秀,但是每一門功課幾乎都沒有短板。也就是說學好了.NET一種技術平臺就可以應對各種商業場景的開發,這對中小團隊是非常友好的?!?/p>

小飛不解的問:“為什么說對小團隊非常友好?”
小黑:“你想,如果你用Java做Web開發,后續做桌面開發怎么辦?Java在桌面端開發是沒有優勢的,如果你用Dart開發移動端,后續想做物聯網開發怎么辦?這對中小企業是很不友好的,因為他們不可能像大企業那樣,為了極致的選型,可以養一批不同技術棧的人員?!?/p>
小飛琢磨了一下,好像是這么回事。
.NET發展和規劃
小飛對.NET的發展不是很感興趣,但是從事.NET技術開發又撇不開它,所以索性就去請教了前輩小黑。
小黑給了他一張版本演化圖:

“你看到什么規律了沒?”
小黑認真的回復到:“從以下.NET Core發展歷史,我們可以看到它的發展的進度非???,微軟會每隔一年發布一個版本,有時候還不止一個,注意看,版本號為奇數的是普通版本,版本號為偶數的為長期支持版本(LTS),我們要關注LTS版本,一般長期支持時間為三年,所以我們選型版本的時候盡量以LTS版本為準”。
“原來如此,還是有一點講究在里面啊?!?/p>
在小飛感嘆的時候,小黑繼續叨叨:“在未來.NET只有一個平臺,就是現在.NET Core演化過去的.NET,而不會有.NET Framework的版本,.NET Core會在.NET 5.0這個版本上對新舊版本進行統一,所以未來從.NET 5.0到7.0都會叫.NET而不是叫.NET Core,而且統一名稱后,微軟會定義在每年的11月份進行新版本發布?!?/p>
“不知道你留意沒有,這里為什么沒有4.0的版本?”小黑故意停頓了一下。
“是啊,我剛才沒有注意看,確實版本號有斷檔?!毙★w撓了撓頭。
“原因是當前.NET Framework為4.8版本,所以二者如果要融合的話,就不能起一個版本沖突的4.X的名字?!?/p>
“明白,非常感謝!”,小飛對.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有什么區別嗎?”
“卡殼中……”
小黑像個布道師一樣繼續說道:“別看他們二者很像,其實骨子里是兩套完全不同的設計框架。除了性能提高之外,關鍵是新架構采用了組件化的設計理念?!?/p>
“組件化是個好東西,而且也聽得多了,但是這里的組件化具體是什么意思,為什么要組件化呢?”小飛發現自己對ASP.NET Core的認知還很膚淺,小黑的話給了他很多觸發,也產生了更多的疑問。
小黑解釋道:“組件化借鑒的是樂高思想,它的核心是復用。比如,我們可以用有限的樂高組件拼裝出各種栩栩如生的玩具。同樣,我們可以復用ASP.NET的組件,比如依賴注入、配置框架、選項框架、日志框架、HTTP中間件等,像流水線一樣拼裝出各種我們想要的Web應用,這里有個高大上的名稱叫控制反轉,扯得有點遠,我們后面再聊。”

“嗯,你的比喻非常形象,樂高確實有很強的復用性。而且,我看每個小孩幾乎都會玩,而且可以無限擴展?!?/p>
“是的,組件化還有易擴展的特點,不知道你發現了沒有,小孩玩樂高是越玩越得心應手,一旦你對ASP.NET的各個組件熟悉之后,我相信你也可以快速生產各種應用了。”
小飛在心中默默的念叨:ASP.NET Core、樂高、易復用、易擴展。
小黑又進一步問道:“好的框架,除了以上,還應該具備哪些特點嗎?”
小飛腦子又嗡嗡起來:“這可是架構師要考慮的,我無論如何也想不出來啊。我只知道以前很多人選擇Java都說因為Java跨平臺?,F在很多鐘情Go,因為容器化、易部署。”
“對了,你說出了兩個很重要的關鍵詞,跨平臺、易部署,這個.NET也考慮到了?!?/p>
小黑很興奮,聲音有點大。
“雖然微軟的開源來得有點晚,很多人對他的過往獨裁有成見,但這次開源確實也是很給力,C#也已經擺脫Windows系統的限制,不但支持Mac OS和Linux,而且對容器化(Docker),微服務、容器編排(Kubernetes)等技術的支持非常友好,這很好地順應了云原生的未來趨勢?!?/p>
很多新概念在小飛的腦袋開始延伸開來……
“為什么微服務和容器化關系這么密切,我經常聽別人把這兩者放在一起?”
小黑:“你可以這么思考,一旦服務的數量擴大為成百上千后會怎么樣?”
小飛:“這么多的服務,部署和運維會讓人抓狂吧?”
小黑:“對的,易部署和易運維也是ASP.NET Core的重要特點。”
一個新框架的誕生想不到背后有這么多的設計理念,小飛繼續在心中念叨一遍:ASP.NET Core、樂高、易復用、易擴展、跨平臺、易部署、易運維。
“小飛,別忘了,新架構如果性能不夠優異,其他的指標再好也沒人用的?!?/p>
“是哦,我經常聽老的.NET程序員聊過舊版ASP.NET首次加載很慢,不知道這次全新改版性能怎樣?”
“微軟在設計早期就將性能列為其重要的目標之一,根據性能測試網站Tech Empower的最新數據(Round18 2019-07-09),ASP.NET Core在云服務器規格下(Azure D3v2 instances)的Plaintext響應測試可達215 941次/秒,JSON序列化響應測試可達52 623次/秒,表現非常亮眼?!?/p>
小飛對測試數據沒有什么感覺,但是感覺好像很快的樣子,小飛在腦子里對這些特點畫了一幅腦圖:

“小飛,你這幅腦圖應該再加一個圈,里面填上…的省略號,他可不僅僅只有這些能力,很多內容我也沒用過呢?!?/p>
“還能有什么能力,我感覺上面這些已經很高大上了啊?”
“我把其他的能力也列在下面,你可以看看。”

編后語:
本人的.NET Core入門和實戰系列課程持續更新中,感謝您的捧場。
浙公網安備 33010602011771號