看看今天為桌面建置的所有不同方法。明智地選擇你的生活伴侶。

恭喜。如果你在 2021 年讀到這篇文章,那麼你已經穿越到了明年。全球大流行已經過去,世界正在恢復正常。對於 Microsoft 堆疊上的開發人員,.NET 6、.NET MAUI 和相關工具已於去年 11 月推出(哈哈,計畫趕不上變化,站長 2022 年 5 月 6 日轉載這篇文章,至今 Maui 還沒有發行正式版,但相信快了,哈哈)。Apple 已經透過穩定的 XCode 版本鞏固了 macOS Monterey 和 iOS 15。如果您今天的任務是啟動一個全新的桌面應用程式專案,您會使用什麼?
首先,請不要讓任何人告訴您桌面應用程式是「舊版」的——環顧四周,您將看到大多數企業工作流程依賴於桌面軟體。
現在是 2022 年,開發人員在如何為桌面建置方面有很多選擇。根據您與誰交談,過多的技術和選擇要不是解放,就是令人卻步。歸根結底,這可能取決於開發人員的體驗以及您正在建置的其他內容,以便更好地共享程式碼。
讓我們探索桌面應用程式的技術堆疊——從三種類型的開發人員的角度來思考。
1. 傳統主義者
專為桌面而設計,使用原生工具,針對一個平台。

1.1 WinForms
Windows Forms於 2002 年隨 .NET 1.0 一起推出,是最古老的 Windows 桌面技術之一——令人驚訝的是,它仍然很強大。WinForms 成功的部分原因在於工具的簡單性、開發人員的高生產力和豐富的工具生態系統。Windows 上的現代 WinForms 應用程式可以在最新的 .NET 執行階段上執行,具有強大的 UI 和對最新 Windows API 的完整存取權限。
1.2 WPF
Windows Presentation Foundation於 2006 年與 .NET 3.0 一起作為 Windows 桌面技術推出,並且還引入了用可擴充應用程式標記語言 (XAML) 定義的可與業務邏輯分離的 UI 堆疊。毫不奇怪,WPF 在最新的 .NET 執行階段上執行並且仍然很強大,同時擁有豐富的開發人員生態系統。現代 WPF 應用程式具有深入的系統整合和最新的觸控/筆跡支援,並散發出現代的 UX。儘管有一點學習曲線,但 WPF 使開發人員能夠提高工作效率並提供豐富的工具生態系統。
1.3 UWP
隨著 .NET C#/VB/F# 等現代語言的發展,將 .NET 與 XAML 結合用於 UI 標記的趨勢在 Windows 8 和 Windows 10 中持續存在。現代需要各種 Windows 裝置外形——平板電腦、電腦、2 合 1、HoloLens、Surface Hub、Xbox、物聯網等。Universal Windows Platform承諾將開發人員體驗結合起來,為所有具有自適應 UI 的 Windows 裝置建置,並透過 Microsoft Store 提供應用程式。
諸如桌面橋之類的後續開發允許開發人員將其較舊的 Win32 應用程式打包在 UWP 容器中以發佈到應用程式商店,並能夠透過 XAML 島將現代 UWP UI 嵌入到其他 Windows 桌面應用程式中。雖然最初的 UWP 願景可能已經演變,但原生執行階段和分離的 API 存取層的基礎今天很好地為 Windows 應用程式服務。
1.4 AppKit/Cocoa
想要為 macOS 建置原生桌面應用程式嗎?AppKit是你的朋友——定義你需要的所有物件來實現製作 macOS 應用程式的 UI 元件以及在螢幕上有效繪製的細節。AppKit 已融入 Cocoa(macOS 的 Objective-C API 框架)中,但 AppKit 也可以從 SwiftUI 中使用。借助 XCode 中的現代工具,為 macOS 桌面建置只是 iOS 和其他 Apple 平台之外的另一個目標。
2. 改良主義者
面向未來的桌面建置,了解跨平台需求,想要程式碼共享。

2.1 WinUI 3
Windows UI Library(WinUI)是用於 Windows 桌面和應用程式 UWP 原生的使用者體驗(UX)框架。WinUI 3 是下一代原生 Windows UI 堆疊,它與 Windows 10 分離,並將 Fluent Design System 融入所有體驗中,以實現一致、直觀且可存取的 UX。WinUI 3 為開發人員提供了對桌面和 UWP 應用程式的最新工具和支援。Windows 應用程式 SDK 提供了一組統一的 API 和工具,可供任何桌面應用程式以一致的方式使用,適用於廣泛的目標 Windows 10 和更高版本的作業系統版本。
2.2 Mac Catalyst
事實證明,大多數開發人員都希望為 iOS 建置,將原生 macOS 開發降級以迎合小眾受眾。Apple 希望透過 Mac Catalyst 解決這個問題——讓 iOS,尤其是 iPad 應用程式,能夠在 macOS 上無縫執行。Mac 和 iPad 應用程式現在可以與 XCode 共享相同的專案/原始碼。AppKit 和 UIKit 之間存在無縫對應,視覺介面針對 iOS 上的觸控和 macOS 上的鍵盤/滑鼠進行了最佳化。
2.3 Flutter
Flutter 在跨平台行動開發中越來越受歡迎——在 Dart 中編寫程式碼並使用小工具在螢幕上繪製像素。Flutter 現在可用於製作面向桌面的跨平台應用程式——Flutter 引擎可以為 Windows、Linux 或 macOS 呈現 UI。雖然對 Flutter 的桌面支援仍處於測試階段(2022 年 5 月 6 日這天,Flutter 的桌面版本已經正式發佈幾個月了,可放心使用),但開發人員可以從單一程式碼庫針對 Windows UWP、macOS 和 Linux,並能夠為現有 Flutter 應用程式添加桌面支援。
2.4 .NET MAUI 桌面
對於 .NET 開發人員,Xamarin.Forms 長期以來一直是製作跨平台應用程式的最簡單方法之一,但 Xamarin.Forms 主要迎合 iOS/Android 行動平台。雖然有面向桌面的 Xamarin.Forms 呈現器,但開發人員對面向桌面的信心不大。隨著 Xamarin.Forms 向.NET MAUI的演變,這種情況發生了變化。
除了 iOS/Android,.NET MAUI 還完全支援桌面平台——Windows 和 macOS。激發開發人員對 .NET MAUI 信心的原因在於,桌面平台支援是一流的,具有來自單一 VS 專案的精美工具和共享應用程式架構。.NET MAUI 沒有重新發明輪子,而是選擇透過兩種廣為接受的技術——WinUI 3 for Windows 和 Mac Catalyst for macOS 在桌面上呈現原生 UI。
2.5 Uno 平台
對於真正想要使用「Windows」XAML 標記進行跨平台的 .NET 開發人員,Uno Platform提供了一個不錯的開源替代方案。為了讓 WinUI 無所不在,Uno 平台可以為 Windows、macOS 和 Linux 上的桌面應用程式提供支援——所有這些都來自 C# 和 XAML 的單一程式碼庫和首選 IDE。
2.6 Avalonia
被吹捧為 .NET XAML 框架的Avalonia提供了另一個開源選項,其中包含基於 XAML 的渲染器,可以為桌面平台(Windows、macOS 和 Linux)上的應用程式提供支援。
3. 趕時髦的人
使用非桌面技術建立桌面應用程式,認為 web 無所不在。

3.1 PWAs
如果使用任何一個 web SPA 框架來建置 web 應用程式,那麼PWA Progressive web apps 是讓相同的應用程式在桌面上執行最易於實現的成果之一。PWA 提供對開放式 web 技術的存取,以實現跨平台的互通性,並為使用者提供為其行動或桌面裝置自訂的類似應用程式的體驗。PWA 本質上是一種網站,經過逐步增強,其功能與支援平台上安裝的應用程式類似,通常具有離線工作、支援推播通知和硬體存取等桌面功能。
從常規的 web 應用程式開始,開發人員可以選擇讓他們的應用程式漸進式發展,添加裝置功能的應用程式清單檔案和背景執行緒操作的 JavaScript Service Worker。像PWA Builder這樣的解決方案使這種轉換易於開始,開發人員可以深入進行 Windows/Mac 桌面整合。
3.2 Electron
希望看到在桌面上執行的 web 應用程式並不是什麼新鮮事。進入滿足此類需求的最普遍解決方案——Electron。ElectronJS是一個開源專案,用於使用 Web 技術建置跨平台應用程式,並且可以針對任何桌面——Windows、Mac OS 和 Linux。
許多最常用的桌面應用程式本質上都是封裝在 Electron shell 中的 Web 應用程式,例如 Visual Studio Code、Microsoft Teams、Slack 和 Figma。
Electron 已經存在了一段時間,並從強大的開發者社群/生態系統中獲得了信譽。大多數使用 JavaScript SPA 框架或 .NET/Blazor 編寫的現代 Web 應用程式都可以使用 Electron 為桌面解決方案提供支援。Electron 作為託管 Web 應用程式的外殼的優勢核心是穩定且可預測的環境的想法。
為此,每個 Electron 應用程式都捆綁了兩個提供可靠性的東西——它自己的 Chromium 引擎副本,用於呈現一致性,以及 Node.js 執行階段。雖然開發人員應該注意他們的應用程式大小/記憶體佔用,但 Electron 已經過實戰測試,並為開發人員提供了廣泛的 API 以進行深度原生桌面整合。
3.3 Blazor Hybrid
如果假設今天有一個穩定的運算環境和現代瀏覽器的存在,那麼 Web 應用程式也許可以透過輕量級 WebView 託管在桌面上——從而建立更小的佔用空間並更容易引導應用程式。
借助 Blazor,開發人員可以使用 C#/.NET 建置現代 Web 應用程式,在伺服器上執行或透過 WebAssembly 完全在用戶端執行。Blazor 非常受現代 .NET 開發人員的歡迎,希望看到 Blazor 強大的桌面解決方案是很自然的。
借助 .NET 6,.NET MAUI 可以提供完美的引導,使Blazor 混合應用程式能夠透過現代 WebView(Windows 上的 WebView 2 和 macOS 上的 WKWebView)在桌面上執行。Blazor 可用於建置真正的原生或混合跨平台應用程式,從而邀請 .NET Web 開發人員進入桌面領域。Blazor 元件模型、Razor 渲染引擎、CSS 樣式和可擴充性的熟悉性現在可以應用於建置桌面應用程式,同時與 Web 共享程式碼。
美好的未來
無論喜歡與否,桌面都將繼續存在。桌面應用程式將繼續為許多企業工作流程提供動力,開發人員將不得不為 Windows/MacOS/Linux 桌面建置解決方案。好消息是關於如何到達桌面有很多選擇——傳統的桌面技術與 Web 或跨平台解決方案愉快地共存,從而實現更多的程式碼共享。就像一個好父母一樣,桌面不會評判——隨便你來。好麵包就是好麵包——不管你怎麼上菜。