鄒溪源,李文強(qiáng),來(lái)自長(zhǎng)沙.NET技術(shù)社區(qū)
一張圖
2019年3月10日,在長(zhǎng)沙.NET 技術(shù)社區(qū)組織的技術(shù)沙龍《.NET Core和前后端分離那些事兒》上,我們?cè)?jīng)試圖通過(guò)一系列抽絲剝繭的過(guò)程來(lái)引導(dǎo)大家在這條基于.NET Core的前后端分離有關(guān)的技術(shù)路線上持續(xù)發(fā)散,由于各種原因未能成功,因此,技術(shù)社區(qū)執(zhí)行主席,李文強(qiáng)同學(xué)整理了一張圖,并由溪源以??男问絹?lái)描述他所認(rèn)為的技術(shù)演進(jìn)之路。
這張圖涉及到的知識(shí)點(diǎn),涵蓋了目前前后端技術(shù)近五年來(lái)發(fā)展的方方面面,作者期望通過(guò)這一張圖,對(duì)當(dāng)前技術(shù)發(fā)展方向進(jìn)行一些簡(jiǎn)單的分析,并希望能通過(guò)與讀者們進(jìn)一步交流,梳理出一些能夠讓更多人快速參與到.NET Core的學(xué)習(xí)過(guò)程來(lái)的技術(shù)資料,期待通過(guò)大家的共同努力,能夠?yàn)榇龠M(jìn).NET 社區(qū)的發(fā)展做成一些貢獻(xiàn)。
本文的吐槽專用地址為,溪源的博客園,歡迎大家來(lái)拍磚。
二,背景,前后端分離,好聚好散,你好我也好
HTTP協(xié)議是互聯(lián)網(wǎng)技術(shù)得以飛速發(fā)展的基礎(chǔ),在這個(gè)起源于上世紀(jì)六十年代的古老傳輸協(xié)議,到今天已經(jīng)走過(guò)了六十個(gè)年頭,并深深的影響了時(shí)代。
到目前為止的新時(shí)代,對(duì)HTTP協(xié)議的應(yīng)用可以說(shuō)無(wú)處不在了,而面向bs的應(yīng)用作為后起之秀,經(jīng)歷了30年的發(fā)展,終于主宰了世界。
在過(guò)去的若干年間類似于php,ASP.NET ,這種技術(shù)一度成為時(shí)代的主旋律。這些腳本化的技術(shù),希望通過(guò)降低開(kāi)發(fā)者的學(xué)習(xí)成本,實(shí)現(xiàn)開(kāi)發(fā)效率的提高,實(shí)際上它看上去也做到了。
但是由于這種技術(shù)存在許多問(wèn)題,例如,在 ASP.NET Web 窗體頁(yè)面上 C# 代碼和 HTML 的混合方式使其難以構(gòu)建單元測(cè)試。如果無(wú)法測(cè)試,久而久之,大型網(wǎng)站的維護(hù)和修改工作會(huì)變得更加困難。如果您確實(shí)創(chuàng)建了測(cè)試,這些測(cè)試大部分是運(yùn)行 UI 的功能測(cè)試 — 即使是在今天,這也是一種脆弱的測(cè)試構(gòu)建法。對(duì)網(wǎng)頁(yè)的任何更改都很可能會(huì)中斷該頁(yè)面的所有測(cè)試。
隨著技術(shù)的演進(jìn),發(fā)展出了服務(wù)端渲染的方式,例如ASP.NET MVC。用戶請(qǐng)求網(wǎng)頁(yè)后,后端先調(diào)用數(shù)據(jù)庫(kù),獲得數(shù)據(jù)之后,將數(shù)據(jù)和頁(yè)面元素進(jìn)行拼裝,組合成完整的 html 頁(yè)面,再直接返回給瀏覽器,以便用戶瀏覽。
然而,由于隨著開(kāi)發(fā)者職責(zé)分工的進(jìn)一步細(xì)化,最終于是,開(kāi)發(fā)者們將資源的粒度進(jìn)一步拆分,后端的歸后端,前端的歸前端,你走陽(yáng)光道,我走獨(dú)木橋,前端通過(guò)ajax調(diào)用,后端則通過(guò)restful api來(lái)提供數(shù)據(jù)。優(yōu)秀的開(kāi)發(fā)者們互相配合,終于打造了互聯(lián)網(wǎng)時(shí)代的高效的開(kāi)發(fā)效率。
從選擇前后端分離技術(shù)開(kāi)始,前端與后端看似走上了不同的發(fā)展道路,但優(yōu)秀的開(kāi)發(fā)者從來(lái)都不甘寂寞,他們能服從這種古老的秩序么?
三,大前端的前身今世
前幾天看到的消息(參考資料1),著名的開(kāi)源組織Node.js基金會(huì)和JS基金會(huì)宣布合并,成立OpenJS基金會(huì),通過(guò)提供一個(gè)中立的組織來(lái)托管項(xiàng)目并協(xié)作資助有益于整個(gè)生態(tài)系統(tǒng)的活動(dòng),從而促進(jìn) JavaScript 和 Web 生態(tài)系統(tǒng)的健康發(fā)展,為推廣技術(shù)而努力。目標(biāo)是讓項(xiàng)目輕松、直接地加入 OpenJS 基金會(huì)并利用其技術(shù)和社區(qū)治理經(jīng)驗(yàn)。托管項(xiàng)目將是基金會(huì)的主要關(guān)注點(diǎn),但 OpenJS 基金會(huì)也會(huì)將其能力擴(kuò)展到非托管項(xiàng)目。
JavaScript、Node.js和前端技術(shù),成為移動(dòng)互聯(lián)網(wǎng)時(shí)代的最閃亮的一顆星,是偶然或是必然?。
曾幾何時(shí),隨著前后端技術(shù)的逐漸分野,Javascript作為網(wǎng)頁(yè)開(kāi)發(fā)過(guò)程中的重要補(bǔ)充,為數(shù)據(jù)數(shù)據(jù)交互過(guò)程提供支持,似乎形成了一種定則或者說(shuō)是一種秩序。
然而,極客們不是這樣想的。Ryan Dahl是Node.js的創(chuàng)始人,他認(rèn)為,JavaScript是一種優(yōu)秀的技術(shù),但是卻只能用于前后端數(shù)據(jù)交互過(guò)程中的中間媒介,運(yùn)行在網(wǎng)頁(yè)前端,這顯然是大材小用。
大家都是語(yǔ)言,憑什么還要分高低貴賤之分?
他一直想尋找一種打破舊秩序的機(jī)會(huì),而谷歌開(kāi)源組件v8引擎給了他機(jī)會(huì)。利用v8引擎,他開(kāi)發(fā)了Node.js,并很快被一大批優(yōu)秀企業(yè)奉為圭臬,眾人拾柴火焰高,有了大企業(yè)的參與,搞起事情來(lái)果然與眾不同,一時(shí)間成為了炙手可熱的新興技術(shù)。
與此同時(shí),伴隨著前后端分離而來(lái)的,還有一大波各種風(fēng)格的前端UI架構(gòu),那些內(nèi)心對(duì)美充滿了渴望的優(yōu)秀的前端工程師們利用有限的資源,開(kāi)發(fā)出類似于bootstrap,layui等在內(nèi)的各種前端框架,讓前端成為了美的代名詞。
Node.js與那么多前端的UI框架們碰到一起,就是肉體和靈魂的完美融合,打造出來(lái)的,已經(jīng)不在是昔年那個(gè)空有外表、必須依賴別人提供力量的體弱多病的林妹妹,而是一個(gè)骨骼健碩,充滿戰(zhàn)力的女漢子。
而昔日僅僅只能開(kāi)發(fā)界面,對(duì)于數(shù)據(jù)的話語(yǔ)權(quán),可以說(shuō)完全沒(méi)有,只能聽(tīng)從后端工程師的調(diào)排的前端工程師們終于可以獲得一次翻身的機(jī)會(huì),誰(shuí)愿意讓機(jī)會(huì)從指尖滑過(guò),他們用自己的雙手,硬生生的拉開(kāi)了這場(chǎng)大前端時(shí)代的帷幕。
一時(shí)間,正可謂百花齊放,百家爭(zhēng)鳴,前端能夠干的事情也越來(lái)越多,甚至于多少年以來(lái)前端工程師鮮有涉及的領(lǐng)域,也可以成為前端工程師們揮毫潑墨的精彩畫(huà)卷。
無(wú)論是后端的專屬領(lǐng)域,數(shù)據(jù)和數(shù)據(jù)庫(kù),大前端開(kāi)發(fā)者都可以獨(dú)立完成,而是還不僅僅局限于關(guān)系型數(shù)據(jù)庫(kù),或者非關(guān)系型數(shù)據(jù)庫(kù),限制前端工程師們操作數(shù)據(jù)的一個(gè)個(gè)壁壘,早就成為紙糊的墻紙。
還是持續(xù)集成技術(shù)的實(shí)踐。前端工程化,讓前端從單個(gè)網(wǎng)站中分離出來(lái),成為一個(gè)更加靈活和安全性更高的應(yīng)用體系,高性能,穩(wěn)定性,高可用性,高可維護(hù)性,這些以往用來(lái)形容后端技術(shù)的詞語(yǔ),也可以應(yīng)用在大前端工程師開(kāi)發(fā)的杰作之中。
或者是設(shè)計(jì)模式和架構(gòu)思想,我起勁還記得兩年前有人評(píng)論說(shuō),前后端工程師,以后最大的區(qū)別,大概是架構(gòu)思想吧。然而,到了今天,設(shè)計(jì)模式和架構(gòu)思想,也成為了前端工程師們政治正確的一個(gè)標(biāo)桿,例如MVVM和AOP等,都被前端開(kāi)發(fā)者們玩得滾瓜爛熟。前端三大框架,angularjs,react,vue.js格外引人注目,靠著獨(dú)特的設(shè)計(jì),一時(shí)間成功的占領(lǐng)了與一切前端有關(guān)的技術(shù)領(lǐng)域,不管是網(wǎng)頁(yè)、跨平臺(tái)的app、甚至桌面程序,這些對(duì)大前端開(kāi)發(fā)者來(lái)說(shuō)都不是難事。
為什么前端會(huì)迎來(lái)如此絢爛的新時(shí)代呢?因?yàn)闆](méi)有爹,沒(méi)有爹就意味著沒(méi)有歷史的包袱,如同一個(gè)黑洞一般,包容和吸取一切可以吸收的精華。
四,大后端的是是非非
相對(duì)于前端而言,曾經(jīng)一度,后端語(yǔ)言的發(fā)展可謂是波瀾不驚,不悲不喜來(lái)形容。
這邊的Java,自從被甲骨文收入囊中之后,開(kāi)始了漫長(zhǎng)的擠牙膏的過(guò)程,雖然保持著一年最少一更最多兩更的節(jié)奏,但是卻后期的版本似乎并沒(méi)有太多值得稱贊的新特性。然而,由于其精良的設(shè)計(jì)理念和開(kāi)源的優(yōu)越性,卻意外的趕上了互聯(lián)網(wǎng)時(shí)代和移動(dòng)互聯(lián)網(wǎng)時(shí)代兩波大風(fēng)口,造就了前所未有的輝煌。
而墻內(nèi)的巨頭微軟,沉迷于軟件公司不可自拔,剛收了諾基亞才沒(méi)多久就創(chuàng)下大幾十億美元的資產(chǎn)減記。唯一值得稱贊的或許是游戲市場(chǎng),大概一度,微軟或許想甚至把游戲當(dāng)做了翻身的唯一機(jī)會(huì),然而,頹勢(shì)一旦開(kāi)始就難以逆轉(zhuǎn),在戰(zhàn)線拉得太開(kāi),讓微軟腹背受敵,這也直接影響了.NET 技術(shù)的發(fā)展。.NET 是微軟于2000年推出來(lái)的技術(shù),曾經(jīng)試圖通過(guò).NET 稱霸互聯(lián)網(wǎng)市場(chǎng),曾經(jīng)一度大殺四方,讓對(duì)手毫無(wú)招架之力。但是封閉和對(duì)于操作系統(tǒng)的過(guò)于依賴,最終成為一個(gè)美麗的遺憾。這么優(yōu)秀的技術(shù)框架,逐漸衰弱,成為了強(qiáng)者們的墊腳石。
在后端語(yǔ)言市場(chǎng),GO語(yǔ)言的興起是一個(gè)變數(shù)。他來(lái)自于谷歌,當(dāng)時(shí)2009年Sun經(jīng)營(yíng)不善,選擇打包出售時(shí)谷歌錯(cuò)過(guò)了下手的時(shí)機(jī),讓Sun落入甲骨文之手。而錯(cuò)失Sun的代價(jià)對(duì)谷歌來(lái)說(shuō)很慘烈,一連串的知識(shí)產(chǎn)權(quán)官司讓谷歌深受打擊,于是谷歌痛定思痛,開(kāi)發(fā)出服務(wù)端新興語(yǔ)言體系GO語(yǔ)言。谷歌不愧為軟件巨頭,GO語(yǔ)言這個(gè)專門(mén)為互聯(lián)網(wǎng)而設(shè)計(jì)的優(yōu)越語(yǔ)言,性能優(yōu)越,功能強(qiáng)大,成為了后端市場(chǎng)的攪局者。
前有Java攔路虎,后有谷歌大灰狼,微軟以前足以跟Java分庭抗禮的半壁江山,眼看即將十不足一,微軟就這么甘心把自己的奶酪獻(xiàn)給別人么?
微軟需要一場(chǎng)秩序的變革,究竟誰(shuí)能來(lái)拯救他?誰(shuí)來(lái)當(dāng)這個(gè)白衣騎士?
一位根正苗紅的微軟人,善于hit refresh的印度裔移民薩提亞·納德拉被推舉了出來(lái)。過(guò)去若干年,他一直在微軟核心部門(mén),負(fù)責(zé)了許多拳頭產(chǎn)品的研發(fā),這一次,他要負(fù)責(zé)的項(xiàng)目,既不toC,也不toB,而是負(fù)責(zé)將微軟從泥坑中拉出來(lái)。他沒(méi)有讓投資者和微軟、用戶失望,他做到了。從戰(zhàn)略的宏觀層面,提出了云為先的戰(zhàn)略,獲得了投資者的支持,又從戰(zhàn)術(shù)層面,推出了全新的.NET Core,成為了后端開(kāi)發(fā)市場(chǎng)的巨大變數(shù)。
.NET Core這種優(yōu)秀的技術(shù),首先繼承了來(lái)自他的父輩.NET Framework一般優(yōu)秀的設(shè)計(jì)理念,又兼具他的對(duì)手們那些開(kāi)源,開(kāi)放靈活的個(gè)性,同時(shí)又天生具備高性能和跨平臺(tái)的技能,成為后端市場(chǎng)一種新的選擇。
時(shí)至今日,.NET Core的應(yīng)用前景已經(jīng)十分可觀,無(wú)論是微服務(wù),還是容器化,彈性架構(gòu)等新興的分布式場(chǎng)景,還是大數(shù)據(jù),人工智能,自然語(yǔ)言等時(shí)髦領(lǐng)域,它同樣可以駕馭。而對(duì)于企業(yè)而言,同樣可以使用.NET Core來(lái)開(kāi)展DevOPS實(shí)踐,為企業(yè)的進(jìn)一步騰飛插上無(wú)窮的想象力。
到目前為止,.NET Core即將發(fā)布3.0版,有哪些新特性值得期待?我們來(lái)看一下吧。
0,NET Core 3實(shí)現(xiàn)了.NET 標(biāo)準(zhǔn)2.1。
1、生成可執(zhí)行文件。
2、生成依賴項(xiàng)的副本
3、本地工具
4、支持WPF與Windows Froms
5、內(nèi)建快速的JSON解析器
6、索引和范圍
7、異步流
8、類型:SequenceReader 序列讀取9、類型:MetadataLoadContext 元素?fù)?jù)負(fù)載描述表
10、支持Linux 上的 TLS 1.3 和 OpenSSL 1.1.1
11、AES-GCM 和 AES-CCM加密算法支持
12、加密密鑰的導(dǎo)入導(dǎo)出
13、Linux上支持串口
14、優(yōu)化了很多現(xiàn)有功能
15、分層編譯
16、Linux的ARM64
限于篇幅,不便全文轉(zhuǎn)載,具體請(qǐng)查看參考資料2。
有史以來(lái),微軟迎來(lái)了最開(kāi)放的時(shí)期。不僅僅造就了市值的歷史最高,更是執(zhí)著于技術(shù)的發(fā)展和投入,對(duì)于.NET 開(kāi)發(fā)者而言,同樣迎來(lái)了新的機(jī)會(huì)。
五,結(jié)語(yǔ),誰(shuí)能獨(dú)步武林?
隨著互聯(lián)網(wǎng)時(shí)代冬天的到來(lái),未來(lái)或許將迎來(lái)幾年平靜的沉淀期,然而哪怕就算是看似平靜的格局,同樣也會(huì)出現(xiàn)革命者。尤其是開(kāi)發(fā)語(yǔ)言,從來(lái)就沒(méi)有什么穩(wěn)定不變的江湖地位可言。在今天看來(lái),似乎Java一家獨(dú)大的局面已經(jīng)成為定勢(shì),難道這種局面就這樣了嗎?
從前后端一體化,到前后端分離,從Node.js的崛起于極客圈,到GO,NET Core孕育于巨頭之中,新時(shí)代,從來(lái)沒(méi)有誰(shuí)能獨(dú)步武林。
未來(lái),誰(shuí)都有機(jī)會(huì)。 是時(shí)候刷新自己,與新技術(shù)共同進(jìn)步了!!
【版權(quán)聲明】 作品來(lái)自于長(zhǎng)沙.NET技術(shù)社區(qū)成員【鄒溪源】
1.《.net項(xiàng)目如何打包發(fā)布?總結(jié)很全面速看!從一張圖開(kāi)始,談一談.NET Core和前后端技術(shù)的演進(jìn)之路》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《.net項(xiàng)目如何打包發(fā)布?總結(jié)很全面速看!從一張圖開(kāi)始,談一談.NET Core和前后端技術(shù)的演進(jìn)之路》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/2238670.html