本文接上文《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. 有Maple T.A.自有试题图so easy

    对于想完全控制试题库的用户而言,Maple T.A.是最好的选择.不论您是要利用现有的题库,还是要创建自己的题库,Maple T.A.都可以为您提供功能强大.操作便捷的工具创建数学内容. 1) Ste ...

  2. 初识Opserver,StackExchange的监控解决方案

    Opserver是闻名遐迩的网站Stack Overflow的开源监控解决方案,由Stack Exchange发布.它基于.NET框架构建,这在监控工具领域有些与众不同. 旨在为每个受监控系统的健康状 ...

  3. ABP理论学习之启动配置

    返回总目录 本篇目录 配置ABP 配置模块 为模块创建配置 为了在应用启动时配置ABP和模块,ABP提供了一个基础设施. 配置ABP 配置ABP是在模块的PreInitialize事件中完成的.下面的 ...

  4. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  5. java中文乱码解决之道(七)-----JSP页面编码过程

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...

  6. WCF服务创建与抛出强类型SOAP Fault

    原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...

  7. Swift 和 C# 的语法比较

    昨天看到Jacob Leverich 写了一篇文章 Swift is a lot like Scala 介绍Swift 和 Scala 的语法对比,从这篇文章的确可以看到Swift 的语法和 Scal ...

  8. JS实战 · 实践积累点滴杂烩

    onmouseover : 鼠标进入 onmouseout : 鼠标离开 onfocus:得到焦点   表单提交执行JS代码,有两种常用方式. 一:在局部(比如按钮定义处)用onclick=" ...

  9. php语言

    <?php//单行注释/*多行注释*///弱类型语言//var a=10;//php定义变量/*$a =10; //变量名前加$$b="hello";var_dump($a) ...

  10. PHP 基础知识测试题 答案分析

    一:选择题(单项选择,每题2分): 1. LAMP具体结构不包含下面哪种(A      ) A:Windows系统              如果是这个就是WMP B:Apache服务器 C:MySQ ...