1. 程式人生 > >從一張圖開始,談一談.NET Core和前後端技術的演進之路

從一張圖開始,談一談.NET Core和前後端技術的演進之路

應用 git 毫無 info 開發者 pan 美麗 過去的 最終

從一張圖開始,談一談.NET Core和前後端技術的演進之路

                                                      鄒溪源,李文強,來自長沙.NET技術社區

一張圖

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 的功能測試 — 即使是在今天,這也是一種脆弱的測試構建法。對網頁的任何更改都很可能會中斷該頁面的所有測試。

隨著技術的演進,發展出了服務端渲染的方式,例如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。

有史以來,微軟迎來了最開放的時期。不僅僅造就了市值的歷史最高,更是執著於技術的發展和投入,對於.NET 開發者而言,同樣迎來了新的機會。

五,結語,誰能獨步武林?

隨著互聯網時代冬天的到來,未來或許將迎來幾年平靜的沈澱期,然而哪怕就算是看似平靜的格局,同樣也會出現革命者。尤其是開發語言,從來就沒有什麽穩定不變的江湖地位可言。在今天看來,似乎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之家新聞
3、https://mp.weixin.qq.com/s/rHiMpNregBNCbpCqm3ykdA DotNET跨平臺公眾號,《微軟開源故事 | 開啟 .NET 開源革命》

【版權聲明】

作品來自於長沙.NET技術社區成員【鄒溪源】,有興趣了解長沙.NET技術社區詳情,請關註公眾號【DotNET技術圈】,作品采用知識共享署名-非商業性使用-相同方式共享4.0 國際許可協議進行許可。

從一張圖開始,談一談.NET Core和前後端技術的演進之路