C-XAMLbased-UI-framework-桌面软件开发观察

4次阅读

共计 2965 个字符,预计需要花费 8 分钟才能阅读完成。

几个事实和事实释放出来的信号:

MS .NET Standard 实现方面:
可看作受到微软官方支持的 C# SDK。三个主流 .NET Standard 实现 是 mono, .NET Framework, .NET Core
1 .NET Core (活跃期:2016-) 是 MS 强推荐的 .NET Standard 实现,目的是 取代 .NET Framework (已初步进入冷藏期)

1.1 这种取代关系的目的,仅限于在 Win 平台
1.2 MS 在 dnc 3 推出的 WPF, Winforms (System.Windows.Forms) 支持,也仅仅在 Win 平台 1
1.2.1 Winforms 和 WPF 各执自己的桌面软件开发办法
1.2.2 Winforms 背后 是 纯代码堆砌 UI (类似 Java Swing, 它是纯代码堆砌 UI),WPF 背后 是 标记语言布局技术 + 代码堆砌 UI (类似 Java JavaFX, 它用到了 FXML:使用 XML 呈现 UI)
1.2.3 同样是 标记语言实现 UI 布局,WPF 使用 XAML,JavaFX 使用 XML
1.2.4 XAML-based UI 的开发实现,它的实现有 WPF、Avalonia、Xamarin Forms 等
1.2.4.1 XAML-based UI 的 平台性:在 linux 和 mac 平台,WPF 暂不可用 (dnc 不支持,mono 不支持),Avalonia 可用 (活跃期:2018- 1)

2 mono 作为一个 .NET Standard 实现 (活跃期:2005-2016 1),用于 把.NET 应用程序移植到 Linux 1 )

2.1 mono 的完备性:1 C# 编译器、JIT 编译器、Runtime、.NET 类库实现 (Winforms (System.Windows.Forms))、可视化开发工具和调试器 (MonoDevelop)。
2.1.1 争议: Mono (创建者 Miguel de Icaza,Xamarin 公司,在 mono 活跃开发期 并不受到微软官方支持) 是否是一个跨平台的 .NET 实现 1。争议的理由是:mono 和 .NET Framework 在语言级别上,都是 CLI 的一种实现,后者 是 CLI 的超集,因为 CLI 本身仅仅有 C# 语言特性 它本身不涉及是否跨平台,没有定义特定的 GUI 组件库 (GUI 组件库 通常是“平台敏感”的,除非 明确说明 是 为跨平台而生 (比如 GTK, QT, Delphi, Electron 1, 以及 Xamarin Forms) 的,它们可被视作“原生跨平台(并不会对哪一个平台有偏向)”)。
2.1.1.1 原生跨平台 的 GUI 组件库:GTK, QT, Delphi, Electron, Xamarin Forms, Java Swing, JavaFX
2.1.1.2 非原生跨平台 的 GUI 组件库:WinForms, WPF, Cocoa, etc.
2.1.1.3 原生跨平台 的 GUI 组件库 + 标记语言实现 UI 布局:GTK(XML), QT(QML), Delphi, Electron(HTML), Xamarin Forms (XAML), JavaFX(XML)
2.1.1.4 原生跨平台 的 GUI 组件库 + 标记语言实现 UI 布局 + C#:GTK#, QT#, Delphi, Electron, Xamarin Forms, JavaFX
2.1.2 mono 本身是否有 CLI 之外的、属于自己的 GUI 组件库?YES. 它有一套 mono flavor 的 WinForms,在 API 调用的角度 可以在源代码级别 几乎兼容 Win 平台 的 WinForms。
2.1.2.1 mono 是否有自己的 GUI 开发办法?YES,即 mono flavor 的 WinForms;在源代码级别可以兼容 Win 平台的 WinForms App.
2.1.2.2 mono WinForms 是纯代码堆砌 UI (类似 Win WinForms, Java Swing, 它是纯代码堆砌 UI)
2.1.2.3 mono 是否会发展出 兼容 XAML-based 的 UI 开发实现?mono 最新版本 1 是 目前暂无支持 XAML-based 的 官方开发实现。然而 Avalonia 作为 原生跨平台 的 GUI 组件库,可以在 mono 上使用 1;Xamarin Forms 作为 原生跨平台 的 GUI 组件库,可以在 mono 上使用 [2]()
2.2 mono 的最新版本 1

3 主流技术总结

对于三个主流 .NET Standard 实现 (mono, .NET Framework, .NET Core),各个平台的桌面软件开发办法的主流技术总结:(按照主流度排序)

对于 dotnet core, 如果想使用 标记语言布局技术 + 代码堆砌 的开发办法:
win: WPF, Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
linux: GTK# (原生跨平台), Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
mac: Xamarin Forms (原生跨平台)

对于 .NET Framework, 如果想使用 标记语言布局技术 + 代码堆砌 的开发办法:
win: WPF, Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
linux: GTK# (原生跨平台), Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
mac: Xamarin Forms (原生跨平台), GTK# (原生跨平台), Xamarin Forms (原生跨平台)

对于 mono, 如果想使用 标记语言布局技术 + 代码堆砌 的开发办法:
win: WPF, Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
linux: GTK# (原生跨平台), Xamarin Forms (原生跨平台), Avalonia (原生跨平台)
mac: Xamarin Forms (原生跨平台), Avalonia (原生跨平台), GTK# (原生跨平台)

4 分析:信息失灵
为什么会出现一边倒的情况?为什么互联网上没有正确的信息?
原因一:很大一部分 dotnet core 的开发者,是 Win 开发者,他们不关心跨平台;即使关心跨平台,也想要优先保障 Win 平台 app 的软件 去 向外兼容各个平台,简言之:他们从来没有把 跨平台当作第一目标 (因为他们的 app 已经开发成了,它首先是一个 Win app,然后是一个 跨平台 app)
原因二:就 C# 开发者而言,本身 90% 都是没有 跨平台需求的,10% 有跨平台需求 那也是跨手机平台 (他们会去用 Xamarin Forms)
原因三:有 跨平台桌面软件开发者 而言,本身 90% 都是会去选择 QT, GTK, Delphi 这些 老牌“原生跨平台”并支持标记语言布局技术的 GUI 组件库 (GUI toolkit):他们,跨平台桌面软件开发者们,没有把 C# 当作一个选项 (所以也就看不见 C# 区提供的 原生跨平台并支持标记语言布局技术的 GUI 组件库,如 Xamarin Forms, Avalonia, GTK# — 诶 有 C++ GTK/QT 就够了)。

5
综上,对于 跨平台桌面软件开发者 + C# + 微软官方支持,最好的选择是:
操作系统:win / mac / linux
.NET Standard 实现:dotnet core
GUI 组件库:Xamarin Forms (原生跨平台) Avalonia (原生跨平台)

Xamarin Forms (活跃期:) 才是赢家。它才是一个 C# 跨平台桌面软件开发者 的正确的、受到微软官方支持 1 2 的选择。

这 才是 一个 C# 跨平台桌面软件开发者 应有的 关注点,Xamarin Forms 开发者圈子 才是他们应该去的圈子。

正文完
 0