WPF老矣,尚能饭否——且说说WPF此生将来(下):安心

在前面的上、中篇中,咱们已经能够看到园子里朋友的点评“后山见! WPF就比winform好! 激情对决”。看到你们热情洋溢的点评,作技术的我也很受感动。老实说,如何在本文收笔--WPF系列文章,我很紧张;我但愿你们阅读完本系列文章后:各取所取、尽兴而归。 坦白的说,葡萄城做为一家专一.NET技术的公司(仅海外分公司之一的西安葡萄城已经成立26年),咱们几乎走遍了微软的技术路线,不管从技术前瞻性、或是技术深度均有涉猎。 咱们作控件的,也是很是想知道WPF将来走势如何。html

但抱歉的是,我没法预测将来WPF会怎么样:数据库

WPF to die? or not to die!编程

 

我只能在本篇收尾披露葡萄城Spread Studio系列产品技术研发路线,与你们共勉:53c4f589xaec41de93feb&690windows

you can't connect the dots looking forward;设计模式

you can only connect them looking backwards.安全

---------摘录一段乔布斯在哈佛大学的演讲词。网络

有理由安心

在前面的2篇中你确定认为我在“黑”微软,而事实上这确实是在“黑”微软。可是事物都有两面性,“黑”完了,也得夸一下,再就是给你们分享一些微软积极和改进的WPF地方,咱继续……架构

还是活跃的团队

根据Greg Levenhagen的文章信息(WPF已死?——不,没死)得出目前仍然有一个开发团队专一在WPF的开发工做上;但Greg没有确切的说明具体数字,所以不能明确的衡量这个团队的做用。
可是很明显的一点是:微软没有放弃这一项亿万人使用的技术,仍然有专职开发团队而不是合并到其余团队里。这已是一个好消息了。    
另外从Greg的信息里得出,这个团队不只是在维护已有的版本,同时还在积极准备着手下一个版本的开发工做(会是WPF5吗?)。固然在没有给这个版本的变动说明的状况下,咱们很难保持乐观,由于极可能它只是一个漏洞修复和性能调整,没有主要功能。框架

仍在开发中(2014-11月更新)

在2014年11月WPF团队发布了一篇新的文章——WPF路线图(The Roadmap for WPF),代表WPF仍在进行开发。该团队的工做重点是修复主要的问题,好比性能,这个从WPF一开始就带着并已持续修复加强的问题点,另外还有和Visual Studio开发套件深度集成等等点。    
或许另外一个更重要的是彻底支持触摸设备和高分辨率设备,代表微软听到了社区的声音并采起了相关的措施。mvvm

新版本的工具

我注意到另外一个在官方工具这边的正面的信号,Prism,这个由一些列工具和开发XAML程序的最佳实践组成的产品,随着WinRT的版本升级也已更新到版本5.0,同时也是为WPF提供的一个新版本。
正如第一部分前文所说,官方的WPF Toolkit已经停了,而另外一个项目接过了接力棒,它就是Externded WPF Toolkit,一个由著名的第三方扩展提供商Xceed开发的项目。所以,从一个WPF开发专家(同理能够是其余的Windows技术)角度来看,这是一个由一系列控件组成的内容丰富的合集,更重要的是它还在开发着,最新的更新是2014年7月,也就是写本文的三个月前的事。    
最后还有两个上层MVVM框架库,MVVM Light ToolkitCaliburn.Micro,也是活着的,最新版大约三个月左右。    
所以WPF的工具生态系统仍是活着的,并持续演进进化着,对于企业来讲这太使人欣慰了,由于不会留下一堆不可维护的项目而发愁了

管理层的改变

在2012年底,当时的Window部门的总裁Steven Sinofsky离开微软。为何说这是给WPF的一个正面信号呢?由于Steven Sinofsky是一个完全的.NET反对派,而且和其余团队搞很差关系(或许这是他离职的主要缘由)。这也能够片面的反映出为,并不是因为一些技术缘由,致使.NET技术没有在下一代Window中做为基础存在,虽然这个微软创立的技术业已软件开发的重要部分之一。从外部来看,很难评估出在Window 8+中Steven Sinofsky的真实感觉和在设计决定中所起的影响。

 

操做系统市场保守性

另外一个WPF的有利消息是,事实上不管公司和我的都不会当即迁移到最新的操做系统,其中有一堆的理由:好比太花钱,好比太费时间,好比风险太大。    
实际上迁移到最新的系统确实是一件使人望而却步的过程,由于须要保持应用程序的兼容性:这包括那些外部供应的,譬如微软办公套件,还有一些内部团队开发的部分。从我我的经验来看,这些软件的构建,会轻轻松松耗掉两年多时间。    
当前(2014年中)在PC市场份额中的WinRT所占比例显得特别落魄:

  • Windows 8 + 8.1 : ~15%

  • Windows 7 : ~55%

  • Windows Vista : ~5%

  • Windows XP : ~25%

      所以PC市场超过80%的设备不能使用WinRT,除了WPF以外别无他选。另外在某些领域对于Window 8+来讲更糟:在我所知的法国公司里,财务这一块对其采用率是零,几乎全部的都没有完成向Windows 7的迁移,甚至其中我所知道的很多仍使用Windows XP,由于安装应用对他们来讲不是问题。


考虑这个更新换代过程将大约有五年时间,在此期间,WPF将是大量应用的惟一选择

应用程序生命周期保守性

你应该知道要迁移一个应用是很费事的:首先你得参与一些列会议并学习对业务的影响,还得在合适的时机努力的把各类“可控的风险”摆到台面上,而后经过新的应用一一搞定,同时还得保证不能有反复。一般在完成完整的切换过程以前还得保证新的和老的应用能同时工做;更甚你还得呼叫数据库团队来迁移数据,网络团队来更新防火墙规则……    
这就是为何企业应用程序直到有合理的业务缘由才会作迁移的缘由,而新技术不是问题,所以,不少现有的WPF程序会停在这里,这意味着WPF技能在能够预见的未来仍然有需求,你只须要看看大量现有的和新开始的WinForm应用程序就能够明白,虽然WPF从2006年就开始替代它。    

从技术角度来看,WPF和WinRT是很类似的,可是不彻底兼容:仍然有不少的功能在WinRT 8.1中没有或者不一样,譬如在WPF中可使用clr-namespace去映射一个命名空间到XAML中,到WinRT中,这就是XAML兼容问题,让人感受如履薄冰。

WPF很成熟

很明显WPF的开发支出显著降低,这看起来值得担忧。

可是据个人经验看来,每个开发人员都有相似的经历:初版开发工做量巨大,后续的发布就会从社区反馈得到好处,最后只须要很小的维护工做。    
这确实是WPF自第一次发布(WPF 3.0(我我的看到的更早的Beta)和WPF 3.5)以来为windows应用程序开发指明的路线;而后WPF 4.0又从工具包(WPF Toolkit)里移过来一些控件,像DataGrid,同时作性能提高,到最后WPF 4.5引入了Ribbon同时依然作性能提高。    
成熟的技术只须要更少的开发支出,通过八年时间,WPF已经很成熟,其新功能和bug修复都已经大大减小。到现在WPF能够说已经进入维护状态,在它的生命周期里,已经不须要“奋发图强”式的作加强开发了。

业务线生态

若是说在某个领域WPF作得很好并一直闪耀的,那必定是业务线(Line Of Business)应用。    
首先大部分专家都是基于.NET作开发,由于它是一个成熟的平台,同时不少公司在Windows平台上开发他们的业务线应用,这些确定不会被抛弃,而是尽量的被重用。    
还有不少以.NET为中心的工具在WinRT下不可用,例如,对象关系映射(ORMs)中得NHibernate或者Entity Framework,而这些偏偏业务线应用访问关系数据必不可少的组件。    
其次,一些大型的业务线应用像交易平台,根本不能从WinRT平台得到好处,由于根本就不须要,甚至限于安全性和移动性,压根就不想要。所以像这一类大型应用一度反对微软WinRT应用的设计规范和指导:他们只想在屏幕上显示最小集合的数据!

学习曲线

若是你是一个经验丰富的WPF开发人员,能够说超过80%不须要再学习就已是WinRT开发人员了,若是你是业务专家,那么80%的经验能够直接应用到WinRT程序中。


缘由就是用来开发WPF应用的大部分基础工具和WinRT是同样的:

    • 同样的编程语言:C#,VB.Net……

    • 同样的标记语言:XAML

    • 同样的方式关联视图和数据:数据绑定(Data binding),数据模版(DataTemplates)……

    • 同样的设计模式和实现:MVVM,INotifyPropertyChanged, INotifyCollectionChanged, ICommand……

所以你在其余基于XAML平台好比WPF和Silverlight的投资能够延续到WinRT上,并缩减学习曲线的陡峭度(还记得当初仍是一个学习WPF的新手吗?)

WPF内容丰富

WinRT不是一个WPF的克隆,其中不少的功能都没有实现,所以若是你只是开发桌面应用程序,从技术能力来讲WPF是一个更好的选择。可是我把它放在最后一条,由于就我我的而言,我以为这并不很是重要,WinRT还一直在向前演进,它们之间的差距将会愈来愈小,可是我仍然猜测一些开发人员不想在WinRT上开发,而是想要WPF。    
再次说明WinRT的附加值不是在其本质上得技术加强,而是在开发模型上提供了移动平台开发能力和部署到微软商店的能力。

将来战略

不管你是企业开发仍是我的开发,你都应该考虑减缓对WPF的技术投资,转而培养在WinRT方面的专长。

业务

在业务方面,由于有一些老版本的Windows,包括Windows 7,因此确定不能中止你的WPF开发工做。对于那些已经存在的应用,也不用担忧,没有必要要迁移到WinRT,除非你想要得到新的能力或者和微软商店兼容。能够预见不久的未来微软会对WPF作支持的,对于微软来讲,向后兼容是一件很重要的事情。举例来讲,虽然已经很难在最新的Windows里创建VB6的环境,可是你仍然能够作到,所以你的应用包括安装都会一直能平滑的工做。    
根据你的可用的工时,你应该把时间专一到技术潜力上,同时让一些开发人员开始认真的考虑一下WinRT:如何从中得到好处,尤为是在开拓用户方面;新的应用将如何开发;如何重利用已有的工具和代码;什么是要关注的潜在问题……    
作一个应用,要想从为手机和平板设计的WinRT中获得好处,得须要先制定好迁移路线,很明显的缘由就是WinRT中缺失了不少WPF种的许多功能。从概念设计开始就应该验证新技术在你的情景中适用度。

开发

做为一个开发,咱们不但愿咱们的技术技能是没人要的,而是创建足够强大的技能组合体以知足更多的业务和项目,以此下降被技术抛在后面的风险。所以,做为一个经验丰富的WPF开发人员,就我我的经验,你应该在选择继续强化你的WPF技能或者转向得到WinRT开发技能之间选择后者。    
或者你能够继续在WPF领域等待直到市面上稀缺WPF开发,就像现在的COBAL和VB6这类老技术同样,可是我估计还得等十年。由于随着IT业的发展,任何技术在市场上都会有不少的开发人员,尤为是像WPF这样的主流技术,因此我是不期望这个。    
可是也没必要面对第n个冒出的新技术而今后意志消沉,这就是咱们这个行业的商业模型:它须要无时无刻的创造新事物(还记得SOA为各大IT公司,他们的雇员、股东和承包商赚了大笔大笔的银子吗)来卖给客户,就像苹果公司(Apple)的iPhone系列,从iPhone 1,2,3……到现在已经6了,估计不久未来就42啦,但这就是它的工做模式。庆幸的是做为开发商的咱们,在众多的壁垒上有咱们的优点,咱们轻松以此为生,客观的说,这些新技术丰富了企业和我的的生活。

结论

综上所述,我认为这些事实是很清楚的:WPF过去辉煌过,现在还在用,在不久的未来会和WinRT会直接竞争,可是当WinRT得到更多投入和足够的市场份额以后,WPF就会像现在的VB6和WinForm同样被弃用。    
重要的是咱们不能否认,有些事情确定会发生,不可避免的在脑子里产生悲观情绪。不要期望WPF还会复兴,在IT界确定不会发生(固然了,COM能够说是借着WinRT之体复出),客观上讲,WPF没有在趋势和新事物上作任何量身定制的亮点。    
固然,前途不是一片灰暗,WPF不是已经消亡和过期,或者正在死亡和弃用,它只是刚刚达到顶峰,当企业基础架构迁移到Windows 8+以后,将来的开发就会选择WinRT,那是WPF就会慢慢淡出。    
请保持务实和透明:在WPF能给你的客户带来价值的时候使用它,可是得透露出相关因素,并帮助他们为未来作好准备。我已经在个人WPF培训的教材中交叉串入一些WinRT的内容,包含了一些简要总结来阐述这些事情,并根据它们的重要性将它们一一突出。    
可是就我我的而言,我以为也不该该在WinRT作过多的投入,为何呢?由于随着对WinRT摄入愈来愈多,我感受好处正在一点一点减小:

  • 若是你是一个业务线应用,你的惟一目标是Windows桌面,同时还得兼容Windows 8以前的系统,至少Windows 7,因从WinRT显然不是一个选项,你还得用WPF;

  • 若是你面向平板和手机,请不要忘记,市场上得90%以上的份额是iOS和Android,因此WinRT压根就不是问题,此时你该选择使用网页技术(Javascript/HTML/CSS)或者像Xamarin(C#)或者QT(C++)这样的本地跨平台框架,就是说,大部分场景WinRT毫无用武之地。此外,应该知道微软正投入巨资在研究后续技术,此时提问是否WinRT已死还为时尚早,可是若是试图把WinRT做为主流的开发平台,我确定会大吃一惊。

在我看来,WinRT是一个仅适用微软内部使用的良好平台,由于它能够很好的在不一样的Windows系统层面上作代码共享,模仿苹果(Apple)的工做模式;可是对于最终开发人员来讲,WinRT是一个很是有限的方式:在PC、平板和手机间共享代码但却只适用于Windows系列设备。或许不少业务其实只须要其中一个,可是我仍怀疑这一点,由于现在的应用一般是由员工我的提供设备(BYOD),它能够是任意设备,很大多是iOS或者Android。

[完。]

 

完整系列文章目录:

---------------------------------------------------------------------------------------------------------------------------------

 

附录一:葡萄城技术栈路线图

 

image

 

    • 1993年介入微软MS-BASIC技术

    • 2002年介入微软.Net Framework技术

 

附录二:葡萄城Spread Studio产品技术路线图

 

image

2014年Spread Studio有4个技术分支:WPF、Winform、ASP.NET、JavaScript(HTML5)

 

附录三:葡萄城产品支持触摸设备和高分辨率设备

image

 

葡萄城WPF技术相关产品连接:

相关文章
相关标签/搜索