小提示
本內容節錄自《Blazor for ASP NET Web Forms Developers for Azure》電子書,可以從 .NET Docs 取得,也可以免費下載 PDF 離線閱讀。
自 2002 年 .NET Framework 首次發行以來,ASP.NET Web Forms 架構一直是 .NET Web 開發的基石。 回到 Web 基本上還處於起步階段時,ASP.NET Web Forms 會採用許多用於桌面開發的模式,讓建置 Web 應用程式變得簡單且具生產力。 在 ASP.NET Web Forms 中,網頁可以從可重複使用的 UI 控制項快速撰寫。 用戶互動會自然處理為事件。 Microsoft和控制廠商所提供的 Web Forms UI 控件生態系統豐富。 控件可簡化連線至數據源及顯示豐富數據視覺效果的工作。 對於偏好視覺化界面的使用者,Web Forms 設計師提供簡單的拖放介面來掌控控制項。
多年來,Microsoft引進了新的 ASP。以 NET 為基礎的 Web 架構,以解決 Web 開發趨勢。 某些這類 Web 架構包括 ASP.NET MVC、ASP.NET 網頁,以及最近 ASP.NET Core。 隨著每個新的框架,有些人預測了ASP.NET Web Forms即將衰落,並批評它為過時和落伍的Web框架。 儘管有這些預測,但許多 .NET Web 開發人員仍會繼續發現 ASP.NET Web Forms 是完成工作的簡單、穩定且具生產力的方式。
在撰寫本文時,每月有近 50 萬名 Web 開發人員使用 ASP.NET Web Forms。 ASP.NET Web Forms 架構穩定到十年前的檔、範例、書籍和部落格文章仍然有用且相關。 對於許多 .NET Web 開發人員來說,“ASP.NET”仍然與“ASP.NET Web Forms”同義,就像第一次設想 .NET 時一樣。 與其他新的 .NET Web 架構相比,關於 ASP.NET Web Forms 優缺點的爭論可能會持續下去。 ASP.NET Web Forms 仍然是建立 Web 應用程式的常用架構。
即便如此,軟體開發的創新並沒有放緩。 所有軟體開發人員都需要掌握新技術和趨勢。 特別有兩種趨勢值得考慮:
- 轉向開放原始碼和跨平臺
- 將應用程式邏輯移轉至用戶端
開放原始碼和跨平臺 .NET
當 .NET 和 ASP.NET Web Forms 第一次出貨時,平臺生態系統看起來與目前的方式大不相同。 桌面和伺服器市場由 Windows 主導。 macOS 和 Linux 等替代平臺仍在努力獲得市場接受度。 ASP.NET Web Forms 隨附 .NET Framework 作為僅限 Windows 的元件,這表示 ASP.NET Web Forms 應用程式只能在 Windows Server 計算機上執行。 許多新式環境現在會針對伺服器和開發機器使用不同的平臺,因此對許多使用者的跨平臺支援是絕對需求。
大部分的新式 Web 架構現在也是開放原始碼,其有許多優點。 使用者不受制於單一項目擁有者,可以修正漏洞並新增功能。 開放原始碼專案可改善開發進度和即將進行的變更透明度。 開放原始碼專案享有來自整個社群的貢獻,並培養支援性的開放原始碼生態系統。 儘管開放原始碼有風險,但許多取用者和參與者還是找到了適當的風險降低措施,讓他們能夠以安全合理的方式享受開放原始碼生態系統的好處。 這類風險降低的範例包括貢獻者許可協定、友善授權、來源掃描和支持性基金會。
.NET 社群已採用跨平臺支持和開放原始碼。 .NET Core 是 .NET 的開放原始碼和跨平臺實作,可在許多平臺上執行,包括 Windows、macOS 和各種 Linux 發行版。 Mono 是 .NET 的開放原始碼版本,可在Android、iOS和各種其他尺寸上執行,包括手錶和智慧型手機電視。 在 2020 年,Microsoft 發行 了 .NET 5,將 .NET Core 和 Mono 協調成「單一 .NET 運行時間和架構,可在任何地方使用,且具有統一的運行時間行為和開發人員體驗」。
ASP.NET Web Forms 是否會受益於移至開放原始碼和跨平台支援? 不幸的是,答案是否定的,或者至少與平台的其他部分相比不完全一致。 .NET 小組 明確表示 ,ASP.NET Web Forms 不會移植到 .NET Core 或 .NET 8。 這是為什麼?
在 .NET Core 早期階段,人們曾努力移植 ASP.NET Web Forms。 發現所需的破壞性變更數目過於劇烈。 這裡也承認,即使是Microsoft,同時支援的網頁架構數量也有其限制。 也許社群中會有人接下任務,創造出開放原始碼且跨平台的 ASP.NET Web Forms 版本。 ASP.NET Web Forms 的原始程式碼已在參考表單中公開提供。 但目前看來,ASP.NET Web Forms 仍將是僅限 Windows 且沒有開放原始碼貢獻模型。 如果跨平臺支援或開放原始碼對您的案例變得很重要,則必須尋找新的專案。
這是否表示 web Forms ASP.NET 已失效 ,且不應該再使用? 當然不是! 只要 .NET Framework 隨附於 Windows 中,ASP.NET Web Forms 就會成為支持的架構。 對於許多 Web Forms 開發人員來說,缺乏跨平臺和開放原始碼支援是非問題。 如果您沒有跨平臺支援、開放原始碼或任何其他 .NET Core 或 .NET 8 新功能的需求,那麼在 Windows 上堅持 ASP.NET Web Forms 就沒問題。 ASP.NET Web Forms 將在未來幾年內繼續成為撰寫 Web 應用程式的生產力方式。
但還有另一個值得考慮的趨勢,這就是轉向用戶端。
用戶端 Web 開發
所有 。以 NET 為基礎的 Web 架構,包括 ASP.NET Web Forms,在歷史上都有一個共同點:它們是 伺服器轉譯。 在伺服器轉譯的 Web 應用程式中,瀏覽器會向伺服器提出要求,該伺服器會在 ASP.NET 應用程式中執行一些程式碼 (.NET 程式代碼),以產生回應。 該回應會傳回瀏覽器來處理。 在此模型中,瀏覽器會當做精簡轉譯引擎使用。 產生UI、執行商業規則和管理狀態的辛勤工作會在伺服器上發生。
不過,瀏覽器已成為多用途的平臺。 他們實作越來越多的開放式 Web 標準,以授與用戶電腦功能的存取權。 為何不利用用戶端裝置的計算能力、記憶體、記憶體和其他資源? 特別是在部分或完全由用戶端處理時,UI 互動可以從更豐富、更具互動性的體驗中獲益。 應該在伺服器上處理的邏輯和數據仍然可以在伺服器端進行處理。 可以使用 Web API 呼叫,甚至即時通訊協定,例如 WebSocket。 如果 Web 開發人員願意撰寫 JavaScript,這些優點就可供免費使用。 用戶端UI架構,例如Angular、React和 Vue,可簡化用戶端Web開發,並在熱門程度成長。 ASP.NET Web Forms 開發人員也可以受益於利用客戶端,甚至有一些即時支援與整合式 JavaScript 架構,例如 ASP.NET AJAX。
但是,橋接兩個不同的平臺和生態系統(.NET 和 JavaScript)的成本也隨之而來。 在具有不同語言、架構和工具的兩個平行世界中需要專業知識。 用戶端和伺服器之間無法輕易地共用程式代碼和邏輯,因而造成重複和工程負荷。 也很難跟上 JavaScript 生態系統,其具有以驚人速度演進的歷史。 前端架構和建置工具喜好設定會快速變更。 業內人士觀察了從格魯特到古爾普到 Webpack 等的進展。 前端框架也發生了同樣的不斷動盪,例如 jQuery、Knockout、Angular、React 和 Vue。 但是,鑒於 JavaScript 在瀏覽器中的主導地位,這種情況幾乎無法選擇。 也就是說,直到網路社區走到一起,並 導致奇迹發生 !
WebAssembly 滿足需求
2015年,主要瀏覽器廠商在 W3C 社群群組中聯手建立名為 WebAssembly的新開放式 Web 標準。 WebAssembly 是 Web 的位元組程式代碼。 如果您可以將程式代碼編譯為 WebAssembly,那麼它可以在任何平台的瀏覽器上以接近原生速度執行。 初始工作著重於 C/C++。 結果是在沒有外掛程式的情況下,直接在瀏覽器中執行原生 3D 圖形引擎的戲劇性示範。 WebAssembly 此後,所有主要瀏覽器都已標準化並實作。
在 WebAssembly 上執行 .NET 的開發工作於 2017 年底宣布,並在 2020 年推出,涵蓋了 .NET 5 及後續版本的支援。 能夠直接在瀏覽器中執行 .NET 程式代碼,以使用 .NET 進行完整堆疊 Web 開發。
Blazor:使用 .NET 進行完整堆疊 Web 開發
在瀏覽器中執行 .NET 程式代碼的能力本身並不會提供建立用戶端Web應用程式的端對端體驗。 Blazor 就是派上用場的地方。 Blazor 是以 C# 為基礎的用戶端 Web UI 架構,而不是 JavaScript。 Blazor 可以直接在瀏覽器中透過 WebAssembly執行。 不需要瀏覽器外掛程式。 或者, Blazor 應用程式可以在 .NET 上執行伺服器端,並透過與瀏覽器的即時連線處理所有用戶互動。
Blazor 在 Visual Studio 和 Visual Studio Code 中具有絕佳的工具支援。 架構也包含完整的UI元件模型,並具有下列專案的內建設施:
- 表單和驗證
- 依賴注入
- 用戶端路由
- 版面
- 在瀏覽器中進行除錯
- JavaScript Interop
Blazor 與 ASP.NET Web Forms 有很多共同之處。 這兩個架構都提供元件型、事件驅動、具狀態 UI 程式設計模型。 主要的架構差異在於,ASP.NET Web Forms 只會在伺服器上執行。 Blazor 可以在瀏覽器中的用戶端上執行。 但是,如果你有 ASP.NET Web Forms 的背景,Blazor 中有許多你會覺得熟悉的地方。 Blazor 對於 ASP.NET Web Forms 開發人員來說,這是一個自然的解決方案,可尋找利用客戶端開發和開放原始碼、跨平臺的 .NET 未來的方法。
本書提供針對 ASP.NET Web Forms 開發人員設計的 Blazor 簡介。 每個 Blazor 概念都呈現在類似 ASP.NET Web Forms 功能和做法的內容中。 到這本書結尾,您將瞭解:
- 如何建置 Blazor 應用程式。
- Blazor 是如何運作的。
- Blazor 與 .NET 的關係。
- 適當地將現有 ASP.NET Web Forms 應用程式移轉至 Blazor 的合理策略。
開始使用 Blazor
要開始使用Blazor很簡單。 移至 https://blazor.net 並遵循連結來安裝適當的 .NET SDK 和 Blazor 項目範本。 您也會找到在 Visual Studio 或 Visual Studio Code 中設定 Blazor 工具的指示。