本文接上文《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 8和ComponentOne 2014V3、ActiveReports 9依然对WPF、WinRT、SilverLight提*品升级和技术支持。
完整系列文章:
WPF老矣,尚能饭否——且说说WPF今生未来(中):策略的更多相关文章
-
“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心
近日微软公布了最新的WPF路线图,一片热议:对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread S ...
-
WPF老矣,尚能饭否——且说说WPF今生未来(下):安心
在前面的上.中篇中,我们已经可以看到园子里朋友的点评“后山见! WPF就比winform好! 激情对决”.看到大家热情洋溢的点评,做技术的我也很受感动.老实说,如何在本文收笔--WPF系列文章,我很紧 ...
-
WPF入门教程系列十五——WPF中的数据绑定(一)
使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...
-
WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
-
WPF自学入门(三)WPF路由事件之内置路由事件
有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...
-
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的目的是为了最大限度地降低了 ...
-
Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决
有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...
随机推荐
-
R语言Data Frame数据框常用操作
Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...
-
Android课程---单选框与复选框的实现
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
-
C# Read/Write another Process&#39; Memory ZZ
Today's tutorial is about...processes' memory! In this article I'll show you how to read/write a pro ...
-
python装饰器之使用情景分析
http://blog.csdn.net/yueguanghaidao/article/details/10089181
-
Xamarin截取/删除emoji表情bug解决方案
大家都知道,一个英文=1字节,一个汉字2字节,而一个emoji表情=4个字节,在有这三种混用的时候,比如app聊天界面,那么删除和截取便成了很头痛的事情. 问题描述 截取导致乱码,如下图: 解决方案 ...
-
PHP中的表单传值
前言:试想一下如果PHP没有了表单传值,那么就相当于一个没有表达能力的人,因此表单传值在php中是相当重要的,但是不难,接下来我们一起来探讨一下吧------> (一)什么是表单传值 概念:表 ...
-
docker下载镜像与替换默认源
1.常用源 中科大docker源:https://mirrors.ustc.edu.cn/docker-ce/ 使用参考文档:http://mirrors.ustc.edu.cn/help/docke ...
-
UI测试后生成测试报告,利用shell脚本上传svn
ui测试后生成测试报告,把报告保存在某一个固定路径 shell脚本把这个报告上传 #!/bin/bash -ile #svn下载文件 #svn checkout http://svn.xxx.com/ ...
-
spring boot整合RabbitMQ(Topic模式)
1.Topic交换器介绍 Topic Exchange 转发消息主要是根据通配符. 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发 ...
-
Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换
批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...