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

恭喜。如果你在 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 合一、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 服务人员。像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 或跨平台解決方案愉快地共存,從而實現更多的代碼共享。就像一個好父母一樣,台式機不會判斷--隨便你來。好麵包就是好麵包--不管你怎麼上菜。