当前位置: 首页 > news >正文

我为什么放弃WinUI3

基于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越来越好…

http://www.lryc.cn/news/14925.html

相关文章:

  • 2023年全国最新安全员精选真题及答案2
  • 计算机408考研先导课---C语言难点
  • K8S 部署 Redis-Cluster 集群
  • [oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络
  • Apache Shiro与Spring Security对比
  • 23春招-mysql事务相关高频面试题
  • 天线理论知识1——基础概念介绍
  • 【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器
  • 特征工程:特征构造以及时间序列特征构造
  • 单master部署简要步骤
  • 【算法基础】(一)基础算法 --- 前缀和与差分
  • c++提高篇——stack容器
  • HTTP安全与HTTPS协议
  • 【c++】类和对象4—c++对象模型和this指针
  • 嵌入式Qt 开发一个视频播放器
  • 阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代
  • 边界检测方法总结
  • Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据
  • 央行罚单!金融机构被罚原因揭秘
  • js中var、let、const详解
  • 【数据库】MySQL概念知识语法-基础篇(DCL),真的很详细,一篇文章你就会了
  • Blender骨骼动画快速教程
  • 【C++算法】dfs深度优先搜索(下) ——【全面深度剖析+经典例题展示】
  • HIVE 基础(三)
  • redis-cluster集群搭建
  • 【C语言】可变参数列表va_list
  • CentOS7.6 MySQL8安装
  • 安装Tomcat的步骤?
  • Redis之分布式锁
  • 2022年中国前10电商GMV总结