基于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模型驱动显示,由此完成一个基本的项目构型。
- 为了上手它,你需要学什么?
- XAML语法(XAML标识,模型绑定语法等) 10小时左右
- ViewModel的实现设计(单向SetProperty,双向INotifyPropertyChanged)5小时左右
- UWP中窗体句柄等机制处理 5小时左右
基本上有了这些,做出来一个简单应用不成问题。
为了解耦,我将Services的实现放到了单独项目上作为NuGet托管,以便用于其他CS(MAUI)程序中调用接口。
- 让我觉得难受的地方:
- 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越来越好…