首先为程序打个广告:如果您喜欢看漫画,欢迎尝试使用「哔哩哔哩漫画 UWP 」,我正在努力将其打造成为体验接近 PerfectViewer / ComicsViewer / MangaMeeya 等老牌漫画软件的 UWP 漫画应用,心情舒畅地在 Windows 大屏设备上阅读漫画,当然还处于早期,有问题可按程序中提供的方式进行反馈,感谢支持,商店地址: https://www.microsoft.com/store/apps/9NN9L42J9FS3
本来这是一个 Side Project,我的本职工作是 Web 切图仔,所以这是一个个人项目,一开始的目标只是让自己能够使用 Surface 去阅读漫画而已,不过在和其他人交流的工程中,慢慢变成希望能够和大家一起分享,所以就开始往更加细致的方向打磨,做成一个大概能拿出来给大家使用的程序.
至于使用 UWP 而没有选择 Electron 之类的主要还是因为 UWP 程序的触摸体验要好很多,在 Surface 上看漫画的话触摸体验是刚需,不过这也意味着放弃了熟悉的技术选型和跨平台部署,不过没关系只要最终好用就行了.
我个人感性地认为微软的这套技术( XAML 的 WinUI + C#)的开发体验是非常好的,比拿社区的东西东拼西凑要舒服很多,所有事情微软都帮你做的一清二楚,从丰富的 API 到最后的部署打包整个流程非常紧凑,丝毫没有打断的感觉,我认为特别是 JS 社区需要学习的地方,三大金刚除了 Angular 因为其定位不同所以功能比较完整之外,其他两个需要拼凑的东西很多,刚开始的体验就比较糟心(比如公司使用 Vue + TS 的面向对象,所以要额外配置 TS 的 Loader、写好 TSLint、自定义 VueLoader、规划项目结构划分模块、实现可以注入至 VueComponent 的 ServiceContainer、实现 TS 反射的 DI、自己配置 Jest 等等等等).
个人本身就比较偏好标记语言写界面,所以 XAML 深得我心,再加上 Web 视图框架借来的 MVVM 已被微软实践好多年,所以上手速度就是一个字快,十分容易接受,而且 XAML 的功能确实强大,Web 上能实现的功能它基本全都有,而且微软新为 UWP 加入的特性让你的选择更广,结果就是出人意料的灵活,我一开始总觉得 Windows 的程序界面不会灵活到像 Web 一样,但结果是真有一拼.
WinUI 内置的 UWP 组件功能还是比较齐全,设备交互上做的十分完善,已经做好了各种外设的交互处理,非常省心;内置组件的可制定性很高,可以通过模板完全自己控制,魔改一番还能保持已有功能,加分;另外微软也实现了很多诸如懒加载、虚拟列表等细节功能,可以省去很多自己写代码实现的时间.
UWP 用 C# 开发的话有时候给人一种在用脚本施展魔法的错觉,优秀的语言 + 高度封装的接口设计使得精力完全集中在程序业务实现,不管过了多久键盘上都会留下浓浓的糖的味道,两个字舒服. 虽然身为切图仔但个人还是比较推崇在工程上使用面向对象来构建,能够最大程度统一代码风格,稳固项目结构,因此 C# 也没给个人带来什么困扰,反而因为不用去实现一堆 ServiceContainer 啊 DI 啊的轮子什么的变得更省心了.
另外大家也知道 UWP 限制很多,不能那么随心所欲,不过因为没有什么 Win32 经验所以不敢过多评论,因为对于一个漫画阅读器来讲 UWP 的功能是完全足够了.
用其他热门语言的眼光来看确实很惨,常见的东西有一些但也不那么丰富,比如想找一个 webp 的解码轮子然而并没有,最终还是使用 jpg 放弃了 webp ;比如设计师会使用 AE 制作 SVGA 动画在程序中使用,UWP 就完全没有这个东西,不过自己简单使用 Win2D 造了一个之后会用上去——总之以干活的眼光看还是少.
程序打包直接用 VS 向导完成后上传微软商店即可,程序审核时间最长经历过两天,最短 40 分钟,幺蛾子不多,不像苹果一样严格到发疯. 数据打点使用巨硬家的 AppCenter,无缝与 UWP 集成的 SDK 非常方便,数据打点 API 也十分简单,程序崩溃自动记录并上传,很省心.
虽然是个人的 Side Project,不过公司同事对本项目的态度还是很积极的,在 Leader 的支持下也变为了官方名义版本,一位后端同学专门为 UWP 开发了独立接口(一个也算啊 (:3 」∠ ❀) ),账号部门的同学帮忙协助解决极验验证码的问题,所以心里是非常非常感激的,这种编码之外的工作体验对个人的激励是非常大的.
不过 UWP 这种 .NET 技术栈的东西,在国内互联网公司中的基础设施建设就是 0,所以有很多东西是要重新造的,比如登录、评论、支付、JSBridge 等等,这些组件在很多公司基本都是公司级别的通用组件,业务部门只负责调取,平台部门负责实现,在面对什么都没有的情况下只能自己从头开始,不过好在需要造的东西不是很多,和相关部门的同学沟通也很顺利,还是在相对短的时间内实现了基础功能. 当然有一些东西就直接将计就计,比如评论就直接嵌了一个网页评论组件而已.
而且整个项目中没有产品经理的介入我觉得是最爽快的一点——按照自己的口味去做设计,按照自己的想法实现功能,然后上架让大家使用,没有乱七八糟的条件约束,这应该是很多朋友也包括我一直想做的事情之一,现在稍稍摸到了这个成就还是比较开心的 (:3 」∠ ❀)
另外多亏当年对美术产生的浓厚兴趣,再加上接触设计类工具软件较早并且在一直使用没有荒废,因此就算在没有设计师的支援下,做出来的东西大概应该没有瞎到各位,自认为正常使用应该是没问题的吧.
因为算是刚刚接触,所以有时候会被微软的迷之 API 迷惑,比如 WinRT 和 .Net Framework 的混搭,能找到多个可以实现相同功能的 API,相关讨论比较少,所以需要多花点时间摸索;有时候会碰到一些有 Bug 的 API,不过多是 .Net 遗留下来的,一般使用 UWP 的新 API 可解决——总之就是相关讨论确实比其他语言少,所以要花的时间多一点.
另外就是微软的文档,你说它全吧它确实挺全的,但有时候感觉逻辑上不清晰,比如一个组件上的重要使用方式会放在设计规范文档中; API Document 有些带示例有些不带就不太方便;还有一些新 Feature 没有详细文档,只有一个类似博文的 Introduction,而且还可能因为 Nuget 的包比较新细节上略有不同,反正文档上总会有些瑕疵吧,不过总体来讲还是很全的.
另外目前 UWP 使用 Sqlite + EF Core 不太友好,比较折腾,简单的说就是 Migration 需要使用 CLI 进行手工操作,还需要先将项目转换为 .NET Standard 项目后进行操作之后再转为 UWP Application,感觉有些山寨,而不是直接改表定义改 Entity 之后自动迁移.
还有就是 VS + Resharper 那个流畅度真的不咋地啊,程序一开多就慢到不行了(但我又离不开 JB 家的习惯).
至今为止微软的 UWP 生态依然很薄弱,当然这和当下的需求和历史进程有关,不过从个人感情来讲,还是希望微软的生态建设越来越好,这两年微软的态度大家都有目共睹;对于本应用,希望还是能够继续完善下去,毕竟作为十年前钻被窝用 PSP 看漫画的基佬,如今使用自己开发的程序在看漫画,还是想要以认真负责的态度来对待,成为自己理想中的目标.
很少写文章记录,感谢您的阅读.
PS:一个微小的贡献,适用于 UWP 的 SVGA 播放器: https://github.com/LancerComet/SVGAPlayer-UWP
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.