基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。

基于个人的经历,说说其中的开发体验。

UI设计语言

无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美感,就像是你刚刚遇到Win11一样,高质量的交互和效果反馈,流畅动画和鲜明的设计风格都吸引了不少现代极简主义者的关注。

从UI设计一致性来讲,无可挑剔,相同的效果如果用其他框架来替代,实现难度或者渲染成本是个指数级的工程

MVVM程序设计

不同于以往CS程序绑定属性式的过去时写法,在WinUI3最新的Demo结构中,我们能看到类似下面的文件结构:

  • Activation放置的View内的一些数据处理器
  • Assets作为资源库
  • Contracts定义服务抽象和ViewModel
  • Helpers提供一些工具类
  • Models作为本地模型存放,类似应用本地配置对象等
  • Services作为服务实现
  • Strings国际化资源
  • Styles全局样式库
  • ViewModels视图模型,这个是MVVM中绑定的关键
  • Views视图组件

我们的应用通过App.xaml,指定MainWindow.xaml作为启动WindowEx实现,MainWindow则通过不同的Page拼装而成,Page内的数据则用过ViewModels模型驱动显示,由此完成一个基本的项目构型。

  1. 为了上手它,你需要学什么?
  • XAML语法(XAML标识,模型绑定语法等) 10小时左右
  • ViewModel的实现设计(单向SetProperty,双向INotifyPropertyChanged)5小时左右
  • UWP中窗体句柄等机制处理 5小时左右

基本上有了这些,做出来一个简单应用不成问题。
为了解耦,我将Services的实现放到了单独项目上作为NuGet托管,以便用于其他CS(MAUI)程序中调用接口。

  1. 让我觉得难受的地方:
  • ViewModel无法复用dto模型,需要独立为XAML的绑定模型建立Model并通过访问器处理SetProperty和NotifyPropertyChanged。
  • 部分组件的一些属性,IsSelect等双绑不稳定,间歇性失效。
  • 应用首次启动速度慢
  • ViewModel的列表属性操作偶尔造成内存崩溃问题。(不清楚是不是使用原因,无法稳定复现)
  • 奇葩的包自动推送,从未成功过

市场现状

由此,在开发完成后,第一时间发布了微软商店,并在小红书和技术群做了推广。
基本受众:喜欢设计的年轻人群,多是圈内人士和UWP小众粉丝。
市场占有率:

迄今为止,Win虽然仍作为PC主力平台,但Win10低版本及以下的用户量依然非常庞大

选择这个市场,意味着你将放弃绝大部分Windows用户,放弃Mac用户,放弃Linux用户

再谈UWP的分发模式

传统Win用户已经习惯安装setup.exe,很多地区因为网络各种问题访问Windows官方商店本身存在障碍,抛开上架审核不谈,这导致商店下载应用本身就充满坎坷。

单独打包setup.exe虽然已经有解决方案,但庞大的包体积和神奇的启动速度,还需要用户单独开启旁加载应用安全设置,这些神操作几乎堵死了独立分发包的路。

但为了 WinUI3 的华丽,我觉得都可以忍,但是…

WinUI3 本身控件生态并不成熟,本身控件具备可定制化的组件属性和组件功能(事件机等)十分局限,甚至相对于WindowsUWP本身的控件库都缺乏很多常用的有力组件。

虽然DevExpress各大顶级控件厂商已经贡献了大量免费的商业许可控件(这也算是优势之一),但依然解决不了很多技术上青涩的现状。

然后,你总在头疼太少的积木和现有积木极少的可玩性,总是缠绕在那点积木时不时给你带来点惊喜bug的头疼,而mvvm的语法相对于现代前端框架而言,简直令人折磨。

而相对于electron这些webview框架,你只需要熟悉bs开发模式,能够拥抱的用户市场和开发便利是可想而知的,那是一个自由的国度…

最后,感谢WinUI,希望UWP越来越好…