"為什么你會(huì)想要使用ASP.NET,還活90年代论颅?",幾年前囱嫩,當(dāng)我提出考慮要在一個(gè)項(xiàng)目中使用ASP.NET時(shí)候恃疯,我的一位老同事的回應(yīng)。當(dāng)時(shí)我很大程度上認(rèn)同他的看法挠说。微軟雇傭了一個(gè)偉大的程序員澡谭,開發(fā)了一個(gè)偉大的語言,創(chuàng)建了一個(gè)偉大的Web框架和IDE工具损俭,但人們?nèi)匀徊惶珴M意蛙奖。那次我們最終沒有為該項(xiàng)目使用ASP.NET的主要原因是因?yàn)檎Z言和框架的封閉模式。使用ASP.NET意味著為我們的服務(wù)器必須支付Windows服務(wù)器許可證費(fèi)用杆兵,或者為了讓我們的C#應(yīng)用程序跑在Linux上雁仲,我們就必須的使用Mono,一個(gè)漏洞百出琐脏,需要填很多的坑的不成熟的玩具攒砖。
但從那以后,很多事情都發(fā)生了變化日裙,微軟真真切切的改變了游戲規(guī)則吹艇,并將ASP.NET從被迫使用的東西變成適宜的選擇,因?yàn)榧词故亲铊F桿時(shí)髦開發(fā)者昂拂,你的雇主也需要使用它來滿足需求受神,.net core?變成了滿足需求的稱手工具。
當(dāng)很多年前第一次學(xué)習(xí)C#時(shí)格侯,我認(rèn)為它是有史以來最好的編程語言鼻听。但是我的興奮并沒有持續(xù)很長時(shí)間,很快我就發(fā)現(xiàn)發(fā)現(xiàn)他有很多的缺點(diǎn)联四。我很早就開始學(xué)習(xí)ASP.NET Core撑碴,幾乎在第剛開始公開發(fā)布的時(shí)候就已經(jīng)關(guān)注它了。當(dāng)微軟微軟宣布要實(shí)現(xiàn)ASP.NET Core跨平臺(tái)時(shí)候朝墩,我對(duì)ASP.NET Core和C#的興趣就再次被提了起來醉拓。
所以,微軟當(dāng)時(shí)的體系的問題并不在于他們技術(shù)、性能或其他大多數(shù)指標(biāo)廉嚼。問題在于它被限定在Windows這個(gè)專有的平臺(tái)玫镐,你不得不使用專有的需要付費(fèi)微軟技術(shù),比如Windows Server和IIS來部署你的應(yīng)用程序怠噪。這意味著與大多數(shù)其他技術(shù)體系相比,你服務(wù)的運(yùn)行成本要高得多杜跷,甚至是C#的最大競爭對(duì)手Java傍念。就算這成本對(duì)于每年產(chǎn)生很多收入的大型企業(yè)而言,與支付的開發(fā)人員工資而言算不得什么葛闷。但對(duì)于早期初創(chuàng)企業(yè)或試圖用其搞點(diǎn)副業(yè)的的開發(fā)人員來說憋槐,這還是有點(diǎn)貴。
與微軟的體系相關(guān)的另一個(gè)糟糕的問題是淑趾,他們的技術(shù)太陳舊阳仔,有很多陳舊的、丑陋的和不一致的API扣泊,這使得整個(gè)體系看起來很臃腫近范。
隨著.NET Core,ASP.NET Core和C#的更新版本的推出延蟹,微軟確實(shí)改變了游戲規(guī)則评矩。 C#已經(jīng)是行業(yè)內(nèi)使用的頂級(jí)語言之一,但微軟采取的順應(yīng)潮流的做法確實(shí)使他們的位置得到了保留阱飘,并幫助其被大量運(yùn)用斥杜。如果你對(duì)這比較生疏,讓我來先來解釋下:.NET Core是微軟幾年前發(fā)布的一個(gè)新框架沥匈,在此之前它解決了所有缺點(diǎn)蔗喂。它是跨平臺(tái),高性能高帖,精致缰儿,并且最重要的是他還開源。以前沒有人想過微軟會(huì)發(fā)布任何可以在Windows以外的平臺(tái)上運(yùn)行的東西棋恼,沒想過微軟整個(gè)開發(fā)平臺(tái)可以在Linux或者蘋果的Mac OS X上運(yùn)行返弹。
微軟.net core開發(fā)體系
微軟體系結(jié)構(gòu)有點(diǎn)龐亂,下面概要介紹下其中的主角:
C# 語言
這是微軟開發(fā)的通用編程語言的名稱爪飘,是ECMA(歐洲計(jì)算機(jī)制造聯(lián)合會(huì))批準(zhǔn)的標(biāo)準(zhǔn)語言(ECMA 334)义起,也是ISO標(biāo)準(zhǔn)語言(ISO/IEC 23271:2006)。本文章主要以C# V7為例师崎,其他相關(guān)信息默终,參考微軟的C#網(wǎng)站。
說到ECMA我們說給話外主題,大家常說Javascript的實(shí)際上是個(gè)慣例叫法齐蔽,但是這個(gè)叫法是有問題的两疚。js的真正名字是ECMAScript(ECMA262),早期js還是歸網(wǎng)景公司的時(shí)候含滴,為了蹭java語言的熱點(diǎn)诱渤,所以叫了Javascript,但是這個(gè)名字是被SUN注冊(cè)商標(biāo)的谈况,但是SUN還是個(gè)很地道的公司勺美,也沒有究其法律責(zé)任,所以叫法就延續(xù)下來了碑韵。直到網(wǎng)景公司將他捐給了ECMA赡茸,才真正叫了ECMAScript,Javascript但是叫順了也被延續(xù)下來了祝闻。但是后來SUN被Oracle收購了占卧,包括Java、mysql和Javascript都是Oracle的商標(biāo)联喘,所以現(xiàn)在如果公司在某些商業(yè)場合時(shí)候不注意用Javascript時(shí)候會(huì)有版權(quán)糾紛的华蜒。畢竟Oracle已經(jīng)把谷歌告了,還要求賠幾十億刀耸袜,也有js開發(fā)者的應(yīng)用使用Javascript這個(gè)名字收到Oracle的律師信友多,所以作為一個(gè)話外題給大家提個(gè)醒。
.NET 框架
這是一個(gè)通用應(yīng)用程序程序開發(fā)框架堤框。它可以用于創(chuàng)建從桌面應(yīng)用程序域滥、移動(dòng)應(yīng)用程序到Web應(yīng)用程序的所有應(yīng)用。但只能在Microsoft的Windows平臺(tái)上運(yùn)行蜈抓。
.NET Core
這是跨平臺(tái).NET的新版本启绰,適用于大多數(shù)主要平臺(tái)等非微軟Windows平臺(tái)。這應(yīng)該是下一代.NET框架
ASP.NET Core
這是一個(gè)基于.NET Core框架構(gòu)建的Web應(yīng)用程序框架沟使。這是之前ASP.NET的后繼者委可。ASP.NET只支持在windows IIS下運(yùn)行。
看完主角簡介腊嗡,讓我們更深入了解下微軟基于.NET Core的新技術(shù)體系着倾,就是這些技術(shù)體系讓我喜歡上C#和.NET Core的。
特性
從外部看燕少,整個(gè)新的.NET Core生態(tài)系統(tǒng)可能看起來像是一只披著喜羊羊皮的灰太狼卡者,對(duì)那些沒有做過多少研究的人來說,很容易認(rèn)為它只是舊版.NET Framework舊人換新婚紗的版本客们。但事實(shí)并非如此崇决,微軟近年內(nèi)一直在努力推動(dòng)開源戰(zhàn)略材诽。微軟宣稱,.NET Core與其前任不同之處在于新增的功能恒傻。最大的特點(diǎn)是新的技術(shù)體系是跨平臺(tái)的脸侥。跨平臺(tái)實(shí)施并不像我們過去看到過的其他一些語言那樣簡單盈厘,他們基于跨平臺(tái)的思想重新構(gòu)建了整個(gè)體系架構(gòu)睁枕。這也使得能夠使用最新的應(yīng)用包裝系統(tǒng),例如容器和的Docker扑庞。他們還開發(fā)了一些合宜的工具譬重,可以讓你基于.NET Core進(jìn)行跨平臺(tái)開發(fā),這是微軟以前從未做過的事情罐氨。
另一個(gè)主要功能是刪除對(duì)IIS的依賴,這是微軟自家的Web服務(wù)器滩援。微軟創(chuàng)建了一個(gè)新的沒有依賴的嵌入式Web服務(wù)器Kestrel栅隐,它不僅沒有任何的依賴,而且還支持開發(fā)人員將它嵌入到應(yīng)用程序中去玩徊,無需另外再安裝運(yùn)行環(huán)境租悄,從而為部署增加了更多的靈活性。然而恩袱,這些還不是的.NET Core所帶來的全部功能泣棋。更多功能,可以參考畔塔,微軟官方的Microsoft .NET Core Guide系列潭辈。
體系架構(gòu)的新鮮血液注入不僅限于.NET Core,C#也一直在持續(xù)更新澈吨,并增加了許多有用的功能把敢。值得提及的有tuples,Async/await谅辣,local 函數(shù)等修赞,C#的開發(fā)也更加便捷高效。
性能
開始使用.NET Core的另一個(gè)重要原因就是性能的極大改進(jìn)桑阶。當(dāng)涉及流行的通用編程語言之間的性能對(duì)比項(xiàng)目是柏副,微軟再次成為了吸人眼球的焦點(diǎn)。性能是開發(fā)社區(qū)中一個(gè)敏感的主題蚣录,因?yàn)轶w系和工具只有在優(yōu)化應(yīng)用程序的性能時(shí)才能帶你到達(dá)目的地割择,剩下的事由碼農(nóng)來搞定就行。但是包归,開發(fā)體系可以做的是鼓勵(lì)并強(qiáng)化性能的最佳實(shí)踐锨推,并優(yōu)化常用的使用場景铅歼,以便在更大的范圍內(nèi)最大限度地提高性能,而這正是微軟所最擅長的换可。
C#本身就是一種令人驚嘆的語言椎椰,并且內(nèi)置許多功能,可以讓你調(diào)整應(yīng)用程序的性能沾鳄,但.NET Core團(tuán)隊(duì)一直在努力優(yōu)化大量內(nèi)置API以實(shí)現(xiàn)最佳性能慨飘。即使早期版本的ASP.NET Core在TechEmpower Benchmarks的性能都已經(jīng)奪人眼球。有大量的企業(yè)利用.NET Core中可用的性能優(yōu)化以最大限度地提高效率的例子译荞。微軟最近發(fā)布了最新版本的.NET Core 2.1以及帶來的巨大地性能改進(jìn)瓤的。
多功能性
讓我再次拾起微軟體系的最大原因是多功能性。由于他是開源吞歼、跨平臺(tái)的圈膏,我?guī)缀蹩梢杂靡粋€(gè)技術(shù)棧不出體系就能構(gòu)建一切,做全棧開發(fā)篙骡。你可以使用UWP構(gòu)建桌面應(yīng)用程序稽坤,使用Xamarin(現(xiàn)為Microsoft的一部分)開發(fā)跨平臺(tái)移動(dòng)應(yīng)用程序,使用ASP.NET Core做Web開發(fā)糯俗,使用SignalR發(fā)布實(shí)時(shí)應(yīng)用程序等尿褪。我的開發(fā)哲學(xué)是“用正確的工作,做正確的任務(wù)”得湘,而.net core讓我仍然可以使用我熟悉和喜愛的語言杖玲,高效的工具和API的高效率的完成開發(fā),而且最重要的是所有這一切都是免費(fèi)的淘正。
工具
我最后要說的是工具摆马。工具鏈?zhǔn)钱?dāng)前.NET生態(tài)系統(tǒng)做的最好的事情之一。你有很多種在多個(gè)平臺(tái)上開發(fā)的方式跪帝。如果你喜歡使用IDE今膊,Microsoft的主IDE,Visual Studio是首屈一指的伞剑。對(duì)于那些喜歡對(duì)其工具進(jìn)行更多設(shè)置改裝的斑唬,并且比較討厭使用現(xiàn)成IDE提供的工具的用戶,可以選擇微軟開源的Visual Studio Code黎泣,這是微軟一個(gè)免費(fèi)開源的代碼編輯器和命令行工具恕刘,它們?cè)试S你構(gòu)建,測試和開發(fā)應(yīng)用程序抒倚,也算是一個(gè)完整的IDE褐着。 VS Code支持大量的第三方擴(kuò)展,可以幫助你更好地開發(fā)托呕,提升你的開發(fā)體驗(yàn)含蓉。
微軟也推出了?Mac版的Visual Studio频敛,與Windows版本不同,但它是一個(gè)完整的軟件包馅扣,可讓你在Mac OS上的Microsoft全新開發(fā)體系下進(jìn)行開發(fā)斟赚。如果你在Linux上,或者只是想使用非微軟家產(chǎn)品的IDE差油,可以選用Jetbrains的產(chǎn)品拗军,他們已經(jīng)發(fā)布了一個(gè)名為Rider的IDE,非常棒蓄喇,是我在Mac上開發(fā)的主力開發(fā)工具发侵。
Rider支持Windows、Linux和Mac OS三大要平臺(tái)妆偏。我的主要開發(fā)機(jī)器是MacBook刃鳄,我非常喜歡Jetbrains Rider或VSCode的工作流程。微軟的Intellisense自動(dòng)完成系統(tǒng)是我在現(xiàn)有的開發(fā)體系中找到的最佳地解決方案钱骂,而且通過添加諸如Jetbrains ReSharper等工具塔沃,可以實(shí)現(xiàn)一個(gè)完美高效的開發(fā)平臺(tái)欢摄,應(yīng)該找不到比這更好的其他工具組合了浊洞。
微軟一直在開發(fā)工具上長期投入時(shí)間和工程設(shè)計(jì)妒挎,他們擁有穩(wěn)定的開發(fā)體系持偏,經(jīng)驗(yàn)豐富且知識(shí)淵博的工程團(tuán)隊(duì)以及多年積累的信任景鼠。新的.NET Core開辟了一個(gè)更大的市場霞势,同時(shí)展示了一家大型公司可以做什么以及他們能夠怎么快速轉(zhuǎn)型油额。在現(xiàn)任CEO Satya Nadella被任命后催植,他開始推動(dòng)公司的工程和開發(fā)方面肮蛹,從而進(jìn)行所有這些重大變革,依托其工程背景创南,改革目前看來很成功伦忠。?
C#和.NET Core可能是微軟在開發(fā)領(lǐng)域長期以來所做最好的事情,也是獻(xiàn)給開源界的一份大禮稿辙。當(dāng)然我在此還要提到這體系外用來替代JS的一個(gè)最流行的免費(fèi)開源編程語言Typescript昆码。也是偉大程序員安德斯·海爾斯伯格發(fā)明有又一干貨(Delphi,.net,J++ ,C#,F#)邻储。