一張圖
2019年3月10日,在長沙.NET 技術社群組織的技術沙龍《.NET Core和前後端分離那些事兒》上,我們曾經試圖透過一系列抽絲剝繭的過程來引導大家在這條基於.NET Core的前後端分離有關的技術路線上持續發散,由於各種原因未能成功,因此,技術社群執行主席,李文強同學整理了一張圖,並由溪源以專刊的形式來描述他所認為的技術演進之路。
這張圖涉及到的知識點,涵蓋了目前前後端技術近五年來發展的方方面面,作者期望透過這一張圖,對當前技術發展方向進行一些簡單的分析,並希望能透過與讀者們進一步交流,梳理出一些能夠讓更多人快速參與到.NET Core的學習過程來的技術資料,期待透過大家的共同努力,能夠為促進.NET 社群的發展做成一些貢獻。
本文的吐槽專用地址為,溪源的部落格園https://www.cnblogs.com/xiyuanMore/,歡迎大家來拍磚。
一,前後端分離,好聚好散,你好我也好
HTTP協議是網際網路技術得以飛速發展的基礎,在這個起源於上世紀六十年代的古老傳輸協議,到今天已經走過了六十個年頭,並深深的影響了時代。
到目前為止的新時代,對HTTP協議的應用可以說無處不在了,而面向bs的應用作為後起之秀,經歷了30年的發展,終於主宰了世界。
在過去的若干年間類似於php,ASP.NET ,這種技術一度成為時代的主旋律。這些指令碼化的技術,希望透過降低開發者的學習成本,實現開發效率的提高,實際上它看上去也做到了。
但是由於這種技術存在許多問題,例如,在 ASP.NET Web 窗體頁面上 C# 程式碼和 HTML 的混合方式使其難以構建單元測試。如果無法測試,久而久之,大型網站的維護和修改工作會變得更加困難。如果您確實建立了測試,這些測試大部分是執行 UI 的功能測試 — 即使是在今天,這也是一種脆弱的測試構建法。對網頁的任何更改都很可能會中斷該頁面的所有測試。 (參考資料3)
隨著技術的演進,發展出了服務端渲染的方式,例如ASP.NET MVC。使用者請求網頁後,後端先呼叫資料庫,獲得資料之後,將資料和頁面元素進行拼裝,組合成完整的 html 頁面,再直接傳回給瀏覽器,以便使用者瀏覽。
然而,由於隨著開發者職責分工的進一步細化,最終於是,開發者們將資源的粒度進一步拆分,後端的歸後端,前端的歸前端,你走陽光道,我走獨木橋,前端透過ajax呼叫,後端則透過restful api來提供資料。優秀的開發者們互相配合,終於打造了網際網路時代的高效的開發效率。
從選擇前後端分離技術開始,前端與後端看似走上了不同的發展道路,但優秀的開發者從來都不甘寂寞,他們能服從這種古老的秩序麼?
二,大前端的前身今世
前幾天看到的訊息(參考資料1),著名的開源組織Node.js基金會和JS基金會宣佈合併,成立OpenJS基金會,透過提供一個中立的組織來託管專案並協作資助有益於整個生態系統的活動,從而促進 JavaScript 和 Web 生態系統的健康發展,為推廣技術而努力。標的是讓專案輕鬆、直接地加入 OpenJS 基金會並利用其技術和社群治理經驗。託管專案將是基金會的主要關註點,但 OpenJS 基金會也會將其能力擴充套件到非託管專案。
JavaScript、Node.js和前端技術,成為移動網際網路時代的最閃亮的一顆星,是偶然或是必然?
曾幾何時,隨著前後端技術的逐漸分野,Javascript作為網頁開發過程中的重要補充,為資料資料互動過程提供支援,似乎形成了一種定則或者說是一種秩序。
然而,極客們不是這樣想的。Ryan Dahl是Node.js的創始人,他認為Javascript是一種優秀語言,設計優雅,功能強大,但是卻只能用於前後端資料互動過程中的中間媒介,執行在網頁前端,這顯然是大材小用。
大家都是語言,憑什麼還要分高低貴賤之分?
他一直想尋找一種打破舊秩序的機會,而谷歌開源元件v8引擎給了他機會。利用v8引擎,他開發了Node.js,並很快被一大批優秀企業奉為圭臬,眾人拾柴火焰高,有了大企業的參與,搞起事情來果然與眾不同,一時間成為了炙手可熱的新興技術。
與此同時,伴隨著前後端分離而來的,還有一大波各種風格的前端UI架構,那些內心對美充滿了渴望的優秀的前端工程師們利用有限的資源,開發出類似於bootstrap,layui等在內的各種前端框架,讓前端成為了美的代名詞。
Node.js與那麼多前端的UI框架們碰到一起,就是肉體和靈魂的完美融合,打造出來的,已經不在是昔年那個空有外表、必須依賴別人提供力量的體弱多病的林妹妹,而是一個骨骼健碩,充滿戰力的女漢子。
而昔日僅僅只能開發介面,對於資料的話語權,可以說完全沒有,只能聽從後端工程師的調排的前端工程師們終於可以獲得一次翻身的機會,誰願意讓機會從指尖滑過,他們用自己的雙手,硬生生的拉開了這場大前端時代的帷幕。
一時間,正可謂百花齊放,百家爭鳴,前端能夠乾的事情也越來越多,甚至於多少年以來前端工程師鮮有涉及的領域,也可以成為前端工程師們揮毫潑墨的精彩畫捲。
無論是後端的專屬領域,資料和資料庫,大前端開發者都可以獨立完成,而是還不僅僅侷限於關係型資料庫,或者非關係型資料庫,限制前端工程師們運算元據的一個個壁壘,早就成為紙糊的牆紙。
還是持續整合技術的實踐。前端工程化,讓前端從單個網站中分離出來,成為一個更加靈活和安全性更高的應用體系,高效能,穩定性,高可用性,高可維護性,這些以往用來形容後端技術的詞語,也可以應用在大前端工程師開發的傑作之中。
或者是設計樣式和架構思想,我起勁還記得兩年前有人評論說,前後端工程師,以後最大的區別,大概是架構思想吧。然而,到了今天,設計樣式和架構思想,也成為了前端工程師們政治正確的一個標桿,例如MVVM和AOP等,都被前端開發者們玩得滾瓜爛熟。前端三大框架,angularjs,react,vue.js格外引人註目,靠著獨特的設計,一時間成功的佔領了與一切前端有關的技術領域,不管是網頁、跨平臺的app、甚至桌面程式,這些對大前端開發者來說都不是難事。
為什麼前端會迎來如此絢爛的新時代呢?因為沒有爹,沒有爹就意味著沒有歷史的包袱,如同一個黑洞一般,包容和吸取一切可以吸收的精華。
三,大後端的是是非非
相對於前端而言,曾經一度,後端語言的發展可謂是波瀾不驚,不悲不喜來形容。
這邊的Java,自從被甲骨文收入囊中之後,開始了漫長的擠牙膏的過程,雖然保持著一年最少一更最多兩更的節奏,但是卻後期的版本似乎並沒有太多值得稱贊的新特性。然而,由於其精良的設計理念和開源的優越性,卻意外的趕上了網際網路時代和移動網際網路時代兩波大風口,造就了前所未有的輝煌。
而牆內的巨頭微軟,沉迷於軟體公司不可自拔,剛收了諾基亞才沒多久就創下大幾十億美元的資產減記。唯一值得稱贊的或許是遊戲市場,大概一度,微軟或許想甚至把遊戲當做了翻身的唯一機會,然而,頹勢一旦開始就難以逆轉,在戰線拉得太開,讓微軟腹背受敵,這也直接影響了.NET 技術的發展。.NET 是微軟於2000年推出來的技術,曾經試圖透過.NET 稱霸網際網路市場,曾經一度大殺四方,讓對手毫無招架之力。但是封閉和對於作業系統的過於依賴,最終成為一個美麗的遺憾。這麼優秀的技術框架,逐漸衰弱,成為了強者們的墊腳石。
在後端語言市場,GO語言的興起是一個變數。他來自於谷歌,當時2009年Sun經營不善,選擇打包出售時谷歌錯過了下手的時機,讓Sun落入甲骨文之手。而錯失Sun的代價對谷歌來說很慘烈,一連串的智慧財產權官司讓谷歌深受打擊,於是谷歌痛定思痛,開發出服務端新興語言體系GO語言。谷歌不愧為軟體巨頭,GO語言這個專門為網際網路而設計的優越語言,效能優越,功能強大,成為了後端市場的攪局者。
前有Java攔路虎,後有谷歌大灰狼,微軟以前足以跟Java分庭抗禮的半壁江山,眼看即將十不足一,微軟就這麼甘心把自己的乳酪獻給別人麼?
微軟需要一場秩序的變革,究竟誰能來拯救他?誰來當這個白衣騎士?
一位根正苗紅的微軟人,善於Hit Refresh的印度裔移民薩提亞·納德拉被推舉了出來。過去若干年,他一直在微軟核心部門,負責了許多拳頭產品的研發,這一次,他要負責的專案,既不toC,也不toB,而是負責將微軟從泥坑中拉出來。他沒有讓投資者和微軟、使用者失望,他做到了。從戰略的宏觀層面,提出了雲為先的戰略,獲得了投資者的支援,又從戰術層面,推出了全新的.NET Core,成為了後端開發市場的巨大變數。
.NET Core這種優秀的技術,首先繼承了來自他的父輩.NET Framework一般優秀的設計理念,又兼具他的對手們那些開源,開放靈活的個性,同時又天生具備高效能和跨平臺的技能,成為後端市場一種新的選擇。
時至今日,.NET Core的應用前景已經十分可觀,無論是微服務,還是容器化,彈性架構等新興的分散式場景,還是大資料,人工智慧,自然語言等時髦領域,它同樣可以駕馭。而對於企業而言,同樣可以使用.NET Core來開展DevOPS實踐,為企業的進一步騰飛插上無窮的想象力。
到目前為止,.NET Core即將釋出3.0版,有哪些新特性值得期待?我們來看一下吧。
0,NET Core 3實現了.NET 標準2.1。
1、生成可執行檔案。
2、生成依賴項的副本
3、本地工具
4、支援WPF與Windows Froms
5、內建快速的JSON解析器
6、索引和範圍
7、非同步流
8、型別:SequenceReader 序列讀取
9、型別:MetadataLoadContext 元素據負載描述表
10、支援Linux 上的 TLS 1.3 和 OpenSSL 1.1.1
11、AES-GCM 和 AES-CCM加密演演算法支援
12、加密金鑰的匯入匯出
13、Linux上支援串列埠
14、優化了很多現有功能
15、分層編譯
16、Linux的ARM64
限於篇幅,不便全文轉載,具體請檢視參考資料2。
四,結語,誰能獨步武林?
隨著網際網路時代冬天的到來,未來或許將迎來幾年平靜的沉澱期,然而哪怕就算是看似平靜的格局,同樣也會出現革命者。尤其是開發語言,從來就沒有什麼穩定不變的江湖地位可言。在今天看來,似乎Java一家獨大的局面已經成為定勢,難道這種局面就這樣了嗎?
從前後端一體化,到前後端分離,從Node.js的崛起於極客圈,到GO,NET Core孕育於巨頭之中,新時代,從來沒有誰能獨步武林。
未來,誰都有機會~
是時候掃清自己,與新技術共同進步了!!
五,附件,一些可用的學習路線圖或資料
1,ASP.NET Core學習路線圖。HTTPs://github.com/MoienTajik/AspNetCore-Developer-Roadmap
2,來自廣西的.NET Core愛好者陳蛇和他的小夥伴們參與收集和翻譯的資料HTTP://www.iotxfd.cn/
3,張善友老師整理的Ocelot學習資料https://www.cnblogs.com/shanyou/p/10363360.html
六,參考資料
1、https://www.cnbeta.com/articles/tech/826737.htm 開源中國新聞《Node.js 基金會與 JS 基金會合併為 OpenJS 基金會》
2、https://www.ithome.com/0/398/577.htm IT之家新聞《微軟釋出.NET Core 3.0預覽版:支援Win32應用新增流暢設計》
3、https://mp.weixin.qq.com/s/rHiMpNregBNCbpCqm3ykdA DotNET跨平臺公眾號,《微軟開源故事 | 開啟 .NET 開源革命》
【版權宣告】
作品來自於長沙.NET技術社群成員【鄒溪源】,有興趣瞭解長沙.NET技術社群詳情,請關註公眾號【DotNET技術圈】,作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。