“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心
近日微软公布了最新的WPF路线图,一片热议;对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread Studio 8.0发布。鉴于此,选择翻译并整理了一篇自codeproject的文章:《Is WPF dead: the present and future of WPF》,抛砖引玉,且聊聊程序员心目中的WPF。
引子
作为一个老牌WPF程序员,多年来一直关注的问题是,在微软发布最新的WinRT框架之后,接下来的客户端编程将何去何从。
显然我有充分的理由担心这个,众所周知的Silverlight的中途搁浅,它对下游的开发人员带来了很大的损害;俗话说:一朝被蛇咬,十年怕井绳。这就是真实写照。
我从2009年开始就对WPF投入很大的精力,使用它开发财务相关的行业软件,如今,我依然还在这里,但是焦点转向了培训相关工作。作为专业开发和培训讲师,WPF的将来对我来说至关重要,这也是我深入思考这个问题的根结。
本文我将本着客观和透明的方式给大家分享我所的发现和感悟,希望起到抛砖引玉的作用,以此为社区提供更好的有前景的WPF。
另外,在本文的结尾,我将为企业和个人开发提供一些策略和个人见解。
有理由担心
首先,我将展示那些我所担心的标志性信号,如果你是一个WPF的利益相关者,这也会是你所担心的。
WPF团队博客断更
如所有微软的技术团队一样,WPF团队也有自己的博客,主要话题集中在向社区分享团队内部成员在WPF上的各种经验。
该博客的最后一篇文章发表于三年前,2011年五月,或者另一个精确的说法是当WinRT宣布开始并作为下一个重大目标的时候。
一个断更的博客会暗示很多问题,恕我直言,从来没有好的方面的:或许这个团队被缩减到极小,以至于博客被挤出任务优先级列表了;也可能是最优秀的团队成员已经转到其他项目,比如WinRT;更甚者,或许这就是团队隐晦的给社区传递出来的信号……
从公共关系角度来看,一个活跃的团队博客是很基本的点,因为它对外展示了技术发展和忠实的开发团队向社区主动表达工作的满意和分享的意愿。
你或许已经注意到微软的MSDN博客其实并不活跃,为数不多的例外是EntityFramework团队博客,这应该归功于经常更新博文的Rowan Miller,而这恰恰就是我一直偏爱这项技术的一个主要理由:这是一个天才团队和有责任的团队开发出来的。
官方WPF Toolkit不再更新
WPF Toolkit是一个由微软团队开发的开源免费项目,目标是WPF的重要辅助套件和前哨。
一个很典型的例子是DataGrid控件,在WPF的起初的发行(WPF3.0和WPF4.0)是没有的,但在Toolkit里面有,到后来,最终WPF4.0把它放到正式的发行里了。
官方的Toolkit一直扮演这样的角色一直到2010年,但是自从项目开始清减之后,也就没有什么人关注所谓的下一版本的发布了。
表现出不活跃的信号是:Google搜索引擎对关键字“WPF Toolkit”的排次把官方的toolkit放第二,而第三方的反倒占据第一(本文第二部分会有更细节的描述)
WPF不再进行认证考试
官方的WPF认证考试(70-511)已经不在延续,并将在2015年夏天终止。
这给开发人员一个强烈的明确信号,就是不要在该项技术上投入了,相应的可以考虑投入时间和精力到WinRT上,这样才会从认证考试获得回报。
或许将来某一天微软会推迟这个认证考试的吊销,正如他们曾经做过的,在收到大量社区开发者的诉求之后会有一定的妥协,但是都不可避免的是,WPF已经不在重要。
就我个人而言,我一直很犹豫要不要过这项认证考试,因为我实在无法保证时间和物有所值(是的,我自己付费)。反而很坚定的认为可以准备WinRT的认证考试,因为它在将来的几年都会是有效。
不再提供Window 8+系统集成
回想WPF4.0发布,同时发布了很多的Window 7系统相关的集成和增强,比如任务栏定制(弹出列表,进度,遮罩等等……)。
但是当WPF4.5到来时,却没有给Window 8+系统功能做完全的集成,比如则边栏(Charm Bar),大多数应用只能通过互操作来交互。
因此,微软没有投资在这些集成工作上,这很明显的揭示WPF已经不再是Window系统的一等公民,实际上它首选投入WinRT的怀抱,个人认为这是一个合理的决策。
WPF不支持WinRT
微软,这个曾经的老牌软件供应商,如今业务多样化,开始成为一个硬件供应商,效仿它的竞争者苹果和三星。
为此微软收购了诺基亚,以期获得移动市场的长期席位。
在平板和笔记本这方面,为了和苹果的iPad平板和MacBook Pro笔记本相竞争,微软推出了Surface系列。
Surface 一代和二代根据硬件架构(x86和ARM)分成两种版本,而后者对应有了自己的专有系统:Windows RT(不要和作为软件层的WinRT混淆);但是Windows RT不支持(至少官方不支持)老的应用接口,比如优秀的老式Win32接口,因此也不支持在此基础上“包装”出来的衍生技术,像WinForm等等,当然包括WPF,因此无法在Surface版本上运行WPF应用程序。
微软不在此投入理由很简单,就是它想在最新的IT趋势中去除Win32,让量身定做的WinRT代替。
完整系列文章:
“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心的更多相关文章
- WPF老矣,尚能饭否——且说说WPF今生未来(中):策略
本文接上文<WPF老矣,尚能饭否——且说说WPF今生未来(上):担心>继续. “上篇”中部分精彩的点评: 虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如现在的WinRT,只 ...
- WPF老矣,尚能饭否——且说说WPF今生未来(下):安心
在前面的上.中篇中,我们已经可以看到园子里朋友的点评“后山见! WPF就比winform好! 激情对决”.看到大家热情洋溢的点评,做技术的我也很受感动.老实说,如何在本文收笔--WPF系列文章,我很紧 ...
- WPF入门教程系列十五——WPF中的数据绑定(一)
使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...
- WPF自学入门(五)WPF依赖属性
在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...
- wpf 研究之道 winform or wpf,u choose who?
很久以前,我们用winform做过一个五子棋的程序,当时用winform的画图,先画出棋盘...后来项目的研究阶段,偶尔用winform做个小工具.闲暇之余,看到介绍wpf的资料,只知道它采用了xam ...
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了. 我们可以简单的实例化一个WP ...
- 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)
在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...
- 【WPF】创建基于模板的WPF控件(经典)
原文:[WPF]创建基于模板的WPF控件(经典) WPF可以创建两种控件,它们的名字也很容易让人混淆:用户控件(User Control)和定制控件(Customer Control),之所以如此命名 ...
随机推荐
- TLogger一个D7可用的轻量级日志
今天调程序,要用到日志.XE7有Qlog,D7用什么 从网上找到了Logger,下载的原文是不支持D7的,不过也只是很少的地方不同,自己修改了下就可以用了 感谢原作者和红鱼的分享 unit Logge ...
- Unity依赖注入使用详解
写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...
- Spring Rabbitmq HelloWorld实例
之前的博客和大家分享了Rabbitmq的基本框架,及其工作原理,网址为 < http://www.cnblogs.com/jun-ma/p/4840869.html >.今天呢,想和大家一 ...
- [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦
[.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- ajax的post方式和get方式比较,以及需要注意的地方
说明:测试所用的js框架为kissy,后端语言为php 写在前面 目前我们可以将ajax请求的情形按照不同的类型进行分类,比如页面编码:utf-8 or gbk; ajax 传参方式 post or ...
- 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法
前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼音首字母却要引入200kb的字 ...
- Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...
- C#设计模式-原型模式
在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配 ...
- CGI概念
CGI(通用网关接口,Common Gateway Interface) CGI是Web服务器与请求处理程序之间传输数据的一种标准,保证Web服务器传递过来的数据是标准格式的,其程序须运行在网络服务器 ...