本文接上文《WPF老矣,尚能饭否——且说说WPF今生未来(上):担心》继续。

“上篇”中部分精彩的点评:

虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如现在的WinRT,只不过API换了一套而已,xaml还是xaml,数据绑定还是数据绑定,依赖属性还是依赖属性,模板还是模板。其实学过WPF的转WinRT还是比较爽的,Blend的操作也没变,只不过现在WinRT的人才需求量的确有点坑。
最后感谢WPF给我们带来MVVM这种开发方式、开发模型。   by @h82258652

虽然winfrom本身停止更新,但是工具却在一直升级啊!比如说VS设计器,C#语法,第三方控件和开源组件等等。
另外,WinForm基于Win32 api的设计本身就很成熟,从内容上来说基本上已经包罗万象,微软不更新也不会有问题。                                                              by @winkingzhang

技术总是要更新换代的,有些人说换个API来赚钱,倒也搞笑,映射出好多人换个API就不会开发了。我倒觉得,人家更新归更新,我们开发者做的其实永远就一件事情,写好我们的代码,做好的产品。.NET的代码永远也就那样写,对吧。                 by @笋干

微软的新​​​策略

​​在2014年二月,微软任命了一个新的CEO,他就是萨提亚·纳德拉,来自微软云服务部门。
他将接替上任史蒂芬·鲍尔默,就是那位不懂移动市场的(首先是iPhone和Android),甚至可能是微软和竞争对手(苹果和三星)市场之争中败北的原因之一。


和他的前任相反的,萨提亚·內德拉为微软确定的全局目标是“云优先,移动优先”,因此要从跳出经典的桌面市场,这确实是一个合情合理的策略。但是准确的说,WPF是一个从“老”模型上设计出来的:这是一个典型的富桌面应用;与之相对的WinRT采用一个完全不同的设计模型,更加贴近移动平台需求。
当然了,桌面和单机市场并没有死亡,但是显然不再是独挑大梁。

微软商​店

​​​为了获取部分应用程序开发商的年收入,像苹果和微软这样的众多平台供应商都创建自己的“商店”,所有的发布和购买都在此。据我所知,很不幸,微软商店的应用程序必须是基于WinRT开发的,因此WPF开发的应用是不能发布到这个商店里。
注意到对于一些业务相关的应用是内部使用和部署的,或者大型的应用程序开发商比如做ERP系统的,他们有自己的分销渠道,因此这都不是问题;但是对于一个小型开发商来说,它就是问题了,因为你希望利用市场的透明性来保证在其他竞争对手之前抢占到市场。
越来越多的人在不知道从哪里获得一个新的应用的时候本能的选择使用在线商店的搜索功能。如果你开发一个WPF应用程序,你将很难发布产品,更不用提销售就更难了,因此,用WinRT开发吧。

移动性​​

如果你每天通过移动设备上的浏览器或者本地应用程序获取数据,那么你肯定懂得如今市场上的潮流趋势:你的应用需要移动版本!
WPF压根就不是一个为移动开发的主角,甚至配角都算不上,前几年,为Windows Phone定制的Silverlight一度亮相,作为当时的Windows Phone 7的开发工具。但是一个平台一套开发套件显然不是好主意,尽管可以共享一些过程和标记代码。
WinRT正是为此问题而诞生,因为它是一套为Windows 8+全系列平台设计的,从系统级别考虑一致性的,易于上手开发的通用工具集。其中有一些第三方控件支持WinRT,如:ComponentOne Studio for WinRT XAML

维护​​​成本

​如果你这些年一直在微软技术平台工作,那么你肯定知道微软花钱很谨慎,一个很好的原因是,首先,作为一个公司,得赚钱,还得比股东要求的更多,所以,能省则省吧;其次,很多看起来似乎很小的一个小功能实际上有很多的工作去做,Eric Lippert在他的博客里做了很生动的阐述:How many Microsoft employees does it take to change a lightbulb?​
因此,当社区提起要修复一个bug或者一个新功能的时候,仅当它是类似下面两条这样的一个大问题才会被采纳:
- 重大问题,比如安全漏洞,即使很少人会碰到
- 小变化但是无数人抱怨
同时开发WPF和WinRT将会暗示同时处理两套功能需求,同时修复两份bug,显然这不合理,尤其在微软削减开支的时候。

可移植性

想想什么是能让WPF“存活”下来的特质呢,比如作为可移植的技术开发客户端应用,但非常不幸,它没有。
已经有一个可移植版本的.NET(指学院派的,包含CLI):Mono,它可以在Windows下运行,同时也能在Linux、Unix和Mac上运行。[注:本文未提到微软.NET开源、可移植的最新消息]
另外,Mono不是一个玩玩而已的技术,它实实在在的工作着,就我个人,我已经在Ubuntu服务器上和Jenkins集成服务上构建应用。
Mono支持大部分的.NET框架的大部分技术,唯独没有支持WPF;如果我记得没错的话,曾经有一个项目叫“Olive”曾经做过尝试,但没有真正的开始,因为工作量太大了,特别是底层呈现层。
Mono支持的唯一界面是WinForm,令人啼笑皆非的是,正因可移植性,WinForm才能比WPF活得更好。

​Silverlight综合征

当我作为一个Silverlight开发人员的时候,我发现技术消亡的速度比我想象的要快得多。时光回到2008/2009年,富互联网应用(RIA)还是一个很响亮的噱头,微软为此发布了自家的框架,Silverlight,并在随后的一系列微软事件中公开亮相,希望各个业务主管在他们的IT体系中运用。随后的2010年,直到2011年第一季度,我们就在开发Silverlight应用。
但是随后的某地举行的一次技术会议上,微软宣布停止推进Silverlight,转而开始推广HTML5生态体系(包括CSS和JavaScript)。但是官方却说Silverlight没变化,对此我非常怀疑,也通告报道此事,而后我的团队决定停止Silverlight开发,转向集中精力投入“经典”的WPF开发,顺带还能获得一些好处(比如,Silverlight不是“即插即用”的,而是首先需要管理员权限安装Silverlight运行环境。


值得庆幸的是,大部分的XAML和C#代码(大约85%)是和WPF共享的,因此没有损失太多,不需要做太多的确认我们就停下来了。
最终这是一个正确的决定,因为到2013年微软官方宣布Silverlight终止,很多的IT相关人员非常吃惊,因为他们没有收到任何前兆。
我想此类事情不会粗暴的再WPF身上发生,但是我认为,在当今的IT环境和上下文中,你肯定很失望,从此多疑,甚至完全不信任。

[未完待续]

鉴于在《WPF老矣,尚能饭否——且说说WPF今生未来(上):担心 》网友们评论的特别声明

葡萄城最近1月发布的Spread Studio 8ComponentOne 2014V3ActiveReports 9依然对WPF、WinRT、SilverLight提供产品升级和技术支持。

完整系列文章:

WPF老矣,尚能饭否——且说说WPF今生未来(中):策略的更多相关文章

  1. “WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心

    近日微软公布了最新的WPF路线图,一片热议:对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread S ...

  2. WPF老矣,尚能饭否——且说说WPF今生未来(下):安心

    在前面的上.中篇中,我们已经可以看到园子里朋友的点评“后山见! WPF就比winform好! 激情对决”.看到大家热情洋溢的点评,做技术的我也很受感动.老实说,如何在本文收笔--WPF系列文章,我很紧 ...

  3. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  4. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  5. WPF自学入门(三)WPF路由事件之内置路由事件

    有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...

  6. WPF自学入门(五)WPF依赖属性

    在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...

  7. wpf 研究之道 winform or wpf,u choose who?

    很久以前,我们用winform做过一个五子棋的程序,当时用winform的画图,先画出棋盘...后来项目的研究阶段,偶尔用winform做个小工具.闲暇之余,看到介绍wpf的资料,只知道它采用了xam ...

  8. WPF自学入门(十一)WPF MVVM模式Command命令

    在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...

  9. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决

    有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...

随机推荐

  1. Java读写文件的几种方法

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  2. 参数的元数据信息&数据库的元数据信息

    package it.cast.jdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql. ...

  3. 使用 MimeKit 和 MailKit 发送邮件

    MimeKit 给.NET 社区带来了一流的 MIME 解析器,它能处理复杂的各种Mime, 性能好.而且开箱即用支持 S/MIME 和 PGP.MimeKit 和 MailKit 支持最新的国际化的 ...

  4. (源码下载)高灵活度,高适用性,高性能,轻量级的 ORM 实现

    我在上一篇博客中简单说明了一个面向内存数据集的“ORM”的实现方法,也提到我的设计实现或许不能称之为“ORM”,姑且称之为 S-ORM吧. 可能有些小伙伴没有理解我的思路和目的,与传统ORM框架做了简 ...

  5. Linux 创建修改删除用户和组

    200 ? "200px" : this.width)!important;} --> 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就 ...

  6. Html5 实现灯笼绘制

    最近在学习Html5,就用JavaScript在Canvas试着绘制了一个灯笼,并作了简要的说明. 具体绘制思路在页面上有说明,不再赘述,代码如下: <script type="tex ...

  7. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  8. SQL 2014 AlwaysOn 搭建

    AlwaysOn底层依然采用Windows 故障转移群集的机制进行监测和转移,因此也需要先建立Windows Cluster,只不过可用性组中的数据库不一定非要再存放在共享存储上了.可以是存储在本地磁 ...

  9. GO语言的开源库

    Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org ...

  10. OpenCascade Chinese Text Rendering

    OpenCascade Chinese Text Rendering eryar@163.com Abstract. OpenCascade uses advanced text rendering ...