WPF数据驱动与行业现状

本文探讨了WPF的数据驱动理念,对比了事件驱动的优缺点,并分析了.NET,尤其是C#在国内的开发形势。根据JET BRAINS调查报告,C#使用稳定,但国内.NET市场需求量有所萎缩,尤其是在互联网行业。尽管如此,作者认为WPF在应用软件开发中具有优势,.NET仍有其发展前景。
摘要由CSDN通过智能技术生成

上一节我们详细描述了MVC和MVVM模式,本节我们在此基础上对事件驱动和数据驱动的区别进行讲述,同时在这之前会先介绍WPF的功能性代码划分。开发者需要对WPF主流的MVVM模式和数据驱动理念。最后我们会一起谈一谈.NET市场在国内的开发现状。

2.1 表示层程序功能划分

数据模型:实现世界中事物和逻辑的抽象。

业务逻辑:数据模型之间的关系交互。

用户界面:由控件构成的、与用户进行交互的界面,用于把数据展示给用户并响应用户的操作。

界面逻辑:控件与控件之间的关系与交互逻辑。

在一个典型的WPF项目中,我们一般会设置Source、Model、View、ViewModel、Page、Styles等文件夹来管理项目结构。

2.2 事件驱动

在WPF出现之前,WinForm、ASP.NET等技术使用的都是事件驱动的概念,事件驱动通过“事件—订阅—事件处理”的关系组织应用程序。事件驱动下,用户进行每一个操作会激发程序发生的一个事件,事件发生后,用于响应事件的事件处理器就会执行。事件驱动也对应着MVC模式的使用形式,例如对于一个计算器软件,当我们按下等于号按钮时,“按钮按下”这个事件就会被触发,通过Controller找到对应用于运算的Model来执行运算操作。

不难发现,事件驱动下,界面控件是主动的,界面逻辑与业务逻辑之间的桥梁是事件,界面逻辑和业务逻辑多多少少都会有关联依赖性。而数据是处于被动地位的,是静态的,等待着控件的事件去驱动。当事件逻辑变得多且复杂的时候,代码就很容易变得复杂难懂,遇到bug时也难以排除。

2.3 数据驱动

MVVM模式就是典型的利用数据驱动的形式,当Model数据发生变化时,ViewModel的观察者会监听到这个变化,并通知界面控件、推动界面控件展示最新的数据;当用户对控件进行操作带来数据变更,通过双向数据绑定会更新在Model中的数据。在这个过程中,控件和控件事件对程序的控制被弱化,它们只参与页面逻辑,而不再主导业务逻辑。可见,在数据驱动的理念下,数据占主动地位,也就是由内容决定形式。事件驱动的桥梁是事件,而数据驱动的桥梁是双向数据绑定,通过Data Binding可以实现数据流向界面,界面也可以将数据流回数据源。

2.4 WPF开发形势和国内行业状况

也许我们能在5年10年前的一些书或论坛中看到对WPF以及.NET技术的赞誉和对其前景的期待,但是现今,社会市场对.NET的需求是否有提升,WPF的工作岗位是否好找,就需要我们重新去审视和探讨了。

2.4.1 JET BRAINS开发者生态系统调查报告

在讲述国内情况之前,我们先来关注到全球开发者的一些情况,了解一下C#/.NET当前的形式环境。JET BRAINS开发者生态系统调查报告2022统计了全球29,269位开发者的回复。

编程语言使用趋势

近几年来C#的使用一直都是趋于稳定的,Java的使用份额始终是C#的两倍左右。另外在语言的受欢迎程度中,按照最常用语言排名,最受欢迎的前4种编程语言是 Python、Java、JavaScript、C# ,最不受欢迎的前4种编程语言是 JavaScript、Java、PHP、C。JavaScript 和 Java 非常有争议,在这里我们不做讨论。不过在按照使用人数来计算最不受欢迎的语言当中,一些较老的编程语言比如Visual Basic和C语言有较大的占比,这是无可争议的。

目标平台和开发平台

母庸置疑,Windows平台是占比最大的目标平台和开发平台。那么.NET技术作为微软核心的心血,是不可能会被淘汰的。

语言对应开发类型

其实在大多数软件类型上,C#和Java所占的比例是相似的,但在游戏开发中,C#和C++是使用最多的语言。C#其实得益于Unity,但是Unity最近搞事情了,这个之后就比较难说了。

2.4.2 一些负面现状的讨论

一些老开发者已经感觉到脱离时代

依然是参考前面的报告,在过去的一年里,C# 的使用情况一直相当稳定。大多数开发者仍在使用相同的版本,不过仍有三分之一的开发者已经使用最新版本 C# 9 完成部分工作。

我们不难发现,C#的版本用户占比在C#5或C#6,与C#7~9的版本之间出现了断节。C# 5 和 6 的使用量跟去年相比保持不变,这是因为在之前版本的软件的持续维护和部分旧厂的旧框架需求依然是保持不变的。但是从C#7开始,跟随C#更新的用户占比已经是全部开发者的三分之二了。也就是说,新的需求和新的框架必然是绑定在一起的,C#的版本更新速度非常快,但是老开发者们的开发技术依然是在C#5和C#6,对于像是C#7之后出现的的模式匹配、元组,C#9之后的记录,是缺少认知和使用经验的。所以老开发者们如果想要持续献身于这个岗位,就不得不去抱着学习新知识的心态,去学习新的内容,在这期间可能一些原有的观念和理解会被打破,但是大体上的逻辑和语法仍然是万变不离其宗的,很多的更新大半是带来了新的语法糖。

.NET国内市场严重萎缩

对于这个观点,我们以数据说话。在求职应聘这块上,以双非本科和专科的就业数据为参照应该是最有说服力的。下面的数据来自职友集和看准网。

薪资水平的变化趋势虽然不大,但是市场需求量确实是肉眼可见的萎缩了。2020年迎来了最严重的需求量大跌,至今依然是不断呈现微小的下降趋势。

.NET岗位对于学习要求基本是大专及以上,但很奇妙的是,对于应届毕业生的需求占比非常小,更多的是需要1~3年的工作经验。

Java的工资确实是必C#要高的。本质上就是Java主要服务于互联网行业,而C#服务于实体工业。我想说的是Java行业的内卷其实是非常激烈的,到处开设的扎堆培训班还有网络教程,我们只是在招聘网站上查找就能发现,相同薪资水平学历要求下,Java所需的技术要求就要比C#多得多。但C#的就业市场份额确实是远不如Java的。C#不得不说,确实是很优雅的语言,它的语法和语法糖用起来更为舒适。Java的形式我是不太了解的,所以有知道的朋友可以在评论区交流。

2.4.3 .NET还有前景吗

WPF是个好技术,我个人认为WPF开发应用软件具有天然优势,能快速开发漂亮的UI控件。其实很多公司都在用,但是都在非互联网行业里,并且大部分都是中小企业,比如各种设备的控制软件,工控、医疗相关公司是使用WPF技术最多的。

.NET会被淘汰吗?绝对不会,只是国内国外的差异比较大。社会的需求从单纯的开发岗位转变为复合型岗位。我们可以发现既有Java转型C#的,也有C#转型Java的。大家看到的大多数评论其实不都是站在一端去说另一端的不好吗?.NET近些年,由封闭走向开放、开源,拥抱多平台、多技术,提供平台化的技术方案,开放的开源社区。所以如果你看到某些人还在说C#/.NET不是开源的,比如某飞,那你可以直接划走了。

市场资源出现萎缩的一个很大原因,一是在移动端和大数据方面没明显的优势,二是由于前几年走开源较晚,开源跨平台技术功能还并不是特别完善,部分院校、培训机构不开.net课程,并且.NET岗位的需求更精,市场开发工程师资源出现了萎缩情况。

现在,有很多程序员关心,.net是否还有发展前景,你可能曾经也怀疑过这个问题,确实是,每个人的时间、精力都有限,在选择技术时,我们只能选择一个方向,想要全面学习不太可能。但是就当下的场景下,我们不得不慢慢地去掌握多个平台的技术,也就是从单一的开发走向复合技术。大家可以想想自己当初是为了什么而去入手走向.NET,是因为兴趣,在循序渐进的学习当中感受到它的便利和强大,还是想脱离某个市场,向这个行业去转型。

也许一项技术的发展很大程度上要取决于它的开发公司以及带来的环境。但作为开发者,我们能做的其实就是学习新技能、提升多方面的技术水平、拓展就业渠道。没有无用的知识,只有无用的人。

更多的经验之谈单凭我一个人的认知其实是不足以评判的。欢迎大家在评论区谈论和交流自身的岗位经验和就业感悟。这节是没有习题资源和面试宝典的,欢迎大家发表自己对于WPF和.NET技术的见解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GhostKINGC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值