一个 iOS 开发者眼中的 WPF 技术
共 2086字,需浏览 5分钟
·
2020-08-01 06:38
知乎上18年的一个帖子,看看iOS开发者怎么评价WPF的,整体还比较中肯,部分观点过于悲观,但不碍于是个好帖子。
事情还要从一年前说起,本来小生我也算是半个果粉,iOS 研发一直做的风生水起,对于知乎上所谓果粉和软粉的撕逼,完全是一种“事不关己高高挂起”的心态。然而好景不长,刚进入公司两个月不到,就因为业务调整,被调去做 PC 开发,开始学习和使用 WPF 技术。到现在,我也勉强算是 iOS 和 WPF 双修的人才了。现在看到知乎上果粉和软粉的时候,莫名地有一种“早已看透一切”的包容和亲切。
知乎的微软话题和 WPF 有关话题,充斥了轮子哥以及类似轮子哥风格的,带着微软浪漫主义色彩的答案,不管中间说了些什么,结尾必定要有一个“(逃”。本来我对轮子哥这种技术前辈,是怀着尊重的态度的。直到我昨天刷到了这么一个问题:
学完了c/c++的语法和简单算法(图论 搜索 dp 快排啥的),应该深入学习算法,还是学习其他语言?帖子链接:https://www.zhihu.com/question/266079812
轮子哥前排建议一个大一学习算法有点吃力的计算机专业学生,去学习 C++ 大规模软件开发。从这个答案,我算是终于看出来,轮子哥答题就是在 xjb 答。我觉得我需要做点什么。我想用自己微弱的力量,给知乎上的微软话题,带来一点清流。于是就有了这篇文章。
本文假设读者对于“WPF 是什么”有一个基本的认识和理解,因此不再赘述有关 WPF 的基本概念。
WPF 的优势
先说结论,WPF 毫无疑问是现在开发传统 Windows 应用最先进的框架,目前看没有之一。WPF 诞生的目的就是为了取代传统 Win32,MFC,以及 WinForm 等开发技术。WPF 的优势具体体现在下面几点:
前沿的设计和强大的框架。作为一个比 iOS 和安卓早出生好多年的 UI 框架,其主体设计是适应 MVVM 的。现在 iOS 和安卓看起来“先进”的 MVVM 设计,其实早就被 WPF 广泛使用了。基于 XAML 的界面解耦,内置的数据绑定引擎等等设计,让 WPF 成为了非常强大的 MVVM 框架。借助于框架的先进性,在传统 Windows 开发领域,其效率是秒杀其他技术的。 完善的工具支持。这一点对于 MS 家的大部分平台都是适用的,装了 VS 之后基本不需要其他工具。VS 本身就可以同时作为 XAML 设计器和代码编辑器。配合 C# 作为开发语言,写代码的体验是很顺畅的。从 VS 2017 开始,甚至支持了运行中 XAML 的即时修改,所见即所得,达到了接近前端开发的体验。进一步提升了开发效率。 较为理想的性能。作为跑在 .NET 上的技术,WPF 实际的性能表现可以说是让人满意的。WPF 本身是使用 DirectX 渲染的,因此其图形性能有一定的保证。在现在电脑配置普遍较高的时代,实际使用中,Win32/MFC 相对于 WPF 的性能优势并不明显。
WPF 的劣势
说完优势该说劣势了,WPF 技术的劣势也是十分突出的,具体有下面几点:
较高的学习成本。相对于 iOS 和安卓,WPF 由于设计思想和框架的复杂性,其入门门槛相对要高很多。而且相对于现在势头正盛的 iOS 和安卓,WPF 的资料在网上要少太多了。对于新手而言,入门是个比较大的问题。 社区的缺失。这也是微软桌面技术一直以来的问题。和 iOS,安卓,以及 Web 相比,WPF 几乎没有社区可言,开源项目寥寥可数 。优秀的 WPF 控件库和工具库,都是商品产品,需要花钱买。对于习惯了 iOS 的开源氛围的我来说,觉得很痛苦。 框架的限制难以适应大量交互需求的现代软件开发。WPF 本身框架的强大是毋庸置疑的,然而同时也给 WPF 带来了非常大的限制。WPF 本身诞生的时代,是传统 Win32 的时代,所有的应用都是按钮菜单那种老式的交互设计。而现在的交互设计却追求自定义 UI 和控件之间的各种联动。在这样的需求面前,WPF 明显是力不从心的,有些东西的实现要绕过框架的限制,代码就会变得丑陋同时难以维护。只能说 WPF 确实是年代太久,不适应我们这个时代了。 内存占用和性能要求较高。由于本身跑在 .NET 上,内存可控性就相对差一些。同时 WPF 框架本身就要占用大量的内存,在这个层面上,几乎没有优化空间。举个例子,一个全新的只有空白窗口,什么都没有的 WPF 工程,在 Debug 模式下运行,就要占用 90M 左右的内存。在配置较低的机器上,程序很容易因为内存占用太高而崩溃。
总结
总体来看,WPF 技术有其先进的一面,也有其缺点。然而 PC 桌面开发的颓势已经形成,不可逆转了。WPF 或许是生不逢时,从出生到现在,还没有来得及经历巅峰,时代就把它拉倒了谷底。