[转]
Windows Presentation Foundation是.NET 3.0中的一个令人感兴趣的新开发工具。我们特邀WPF培训师和作者Ian Griffiths为我们将介绍WPF、Silverlight和其它微软产品。
你认为WPF最令人感兴趣的是什么?
对我来说,最感兴趣的就是当我看到它所能够完成的工作时的“最后”时刻。因为当使用Win32开发用户接口时,有很多令人不满意的地方,尤其是各个部分都不能很好地结合在一起。
你可以进行3D设计或开发视频,但是在一个平台上实现完成这两件工作将是令人头痛的事情,如果你想单独开发用户接口组件如按钮和列表框并使它们能够协作完成任务,那么将所有组件组合起来将是一件不可能的事情。
WPF的优点
WPF将所有这些功能集成到一个平台上完成,因此如果你想将视频,图形,3D和文本混合在一起,你将不再需要不同的平台。这不像是拥有HTML、Flash、Win32和DirectX,它只是一个平台。
你可以将这些集成到一起,但并不是说你可以将一个视频放在一个按钮上,实际上集成在一起并不是最令人感兴趣的,而更令人感兴趣的是它没有任何限制。例如,我们在BBC上使用的视频,通过数据绑定提供了大量信息。
它可以在一个应用中使用,然后迅速转向另一个视频播放程序,现在我们可以将它们集成在一起使之像在一个应用中。没有WPF根本不可能将它们融合在一起,正是WPF使得过去很难融合的东西结合在一起。
WPF中业务逻辑和用户接口之间分离的优点是什么?
坦白讲,在所有用户接口领域这都是很重要的。我的意思是如果你在考虑一些像Web应用之类的东西,他们已经作了好多年的这类事情。而且我敢保证我们都实现过所有逻辑都在HTML中实现的一些应用,完成这样的工作真是令人恐怖。
因此,分离关注重点确实是一个很好的原则。因此,WPF只是学习了以前HTML世界领教过的教训。但是,你可能会争论我们曾经在Windows窗体中也有这样的教训,Windows窗体中有设计界面和代码界面它们有几分的相似,但与WPF的最大区别是现在我们已经有了一个标记语言,即XAML代表用户接口。
你可以获得在用户空间使用的但并不是开发人员使用的工具,然而,Windows 窗体实际上都是代码,因此当我们构建一个可用于设计用户接口的工具时,你需要包含一个开发系统,实际上就是一个开发人员工具。
利用WPF进行开发的方法与之不同,你可以使用像微软的Blend工具来构建XAML。同时还有画图包,Expression设计工具等。然后,你还可以获得用于像Illustrator等这些能过直接插入XAML中的插件,所以设计者可以使用这些工具来创建可以用于UI的标记。
这些事情在Windows窗体中是不可能做到的。Web其它开发工具作这些事情已有一段时间,我们有Dreamweaver和Frontpage等这些专用于标记的开发工具。WPF可以完成这些设计,同时具有运行于客户端,良好的安全控制和硬件使用等优点。
如果用XAML进行开发,能够在应用和网页中都使用它吗?
简单的回答是不可以。这是很多人对WPF的一个误解。主要是因为有一段时间微软使用的宣传口号:“最好的Web,最好的Windows”。人们就认为你开发的东西可以自动的在两个地方运行。但实际上并非如此。
我们可以构建一个可在Web页中运行的应用,我们将这些应用称为XBAPS,XAML浏览器应用,但是这要求客户端必须安装WPF来运行这些应用,所以它们不会在苹果OS X或Linux上运行,也不会在没有安装.NET 3.0框架的Windows 个人计算机上运行。
如果你安装了.NET 3.0框架,它就会像一个WPF应用一样可以在浏览器框架内运行,这样的话,看起来就会没有什么不同,因为的确是一样的。但是需要理解的是开发能够实际工作的东西的空间是十分有限的,因为这要求客户端安装.NET 3.0。
还有Silverlight,这是现在名称,以前称为WPF/E。它实际上是移动了一点边界,Silverlight的用意是解决大范围的硬件问题,因此它可以运行在苹果OS X系统上,可以是Power pc硬件也可以是Intel硬件,它还可以在IE之外运行,比如可以在firefox上运行。
但是这实际上不是使用WPF,而是使用XAML,因此,它和标记语言是同一家族的。不过它是XAML的一个相当有限的子集,你不能使用数据绑定,没有布局,没有控制,只有一个受限版的事件模型。它是一个很小很小的子集,坦白地说,对开发人员来说,使WPF让人真正感兴趣的并不是Silverlight。
这是因为他们想把所有东西集合到一个很小的下载版中,他们想把翻译,运行时,视频回放都集合到一个只有一两兆字节的下载版中,而不是像你机器上的.NET 3.0有40或50兆字节那么大。因此,免得你必须为灵活性付出一些代价。
你可以开发一个Silverlight应用,但是构建一个即能作为普通应用运行同时又能作为一个WPF应用运行是不可能,现在还没有能够这样做的方法。
或许将来会出现相应的工具,因为现在只是Silverlight发展的早期阶段。但在你使用Silverlight的时候,只是使用Silverlight和浏览器,如果使用WPF和XBAPS,只要在客户端有.NET,它们会和Siverlight看起来是一样的。
你认为选择Macintosh作为Silverlight的一个平台,其理由是什么?
我认为这在某种程度上宣示了该产品的跨平台特性,它不只是用于Windows。通过演示它可以运行于Mac,可以运行于Firefox,可以运行于Safari,可以运行于所有其它不同处理器,这是在表明该产品与WPF不同的一种方式。
你不需要Windows特定平台来运行它。至于为什么他们首先做出这样的声明,是因为他们承认存在大量不使用Windows的人群,他们希望能够接近这些人群。他们想说“看,你并没有被限制在微软的技术门外,只要你是运行Mac OSX的用户。”
使用计算机的人群只是一少部分但是十分重要的一部分,尤其是在某些行业领域,计算机处于支配地位,即使只占所有使用的个人计算机的很少的一部分。
如果你观察一下微软把像Expression套件等产品推向何处,你就会发现他们在逐渐集合这些产品以加强在那些领域的优势。因此他们非常接近Macs,因为Macs在这些领域是强大的,否则的话微软不会看重它。所以这只是微软希望占领真个市场的一个策略问题。
你如何看待XAML的将来,它可以用于WPF之外吗?
XAML已在工作流框架Workflow Foundation中了, Workflow Foundation是.NET 3.0的一部分。虽然不是相同的编译器,但是相同的语言,因为在开发时他们需要完成不同的工作,但使用的是相同的规范。因此,它是一个可在更广的范围内使用的语言。
XAML 的自然应用在何处还不是很清楚,因为XAML有一个特点,即虽然你可以使用它构建任意多个.NET对象树,但是在大脑中用XAML设计好整个框架后再进行实际开发,效果往往会更好。所以你可以用XAML开发一个Windows窗体应用,但用WPF会更容易些,因为每个API特性都是按照我们设想的实现的。
利用Windows窗体不会实现这一点,因为这不是设计简介的一部分。因此你可能需要利用XAML设计的API函数,这并不是利用现有的技术能够实现的,除非你很幸运。更有趣的是这需要认真思考。
人们希望看到更多XAML的应用,他们会说:“是的,利用XAML可以很好的处理Windows Presentation和工作流,我们可以用它做其它的类似事情吗?”但是我认为这需要一些时间,我的意思是这要看.NET3.0的普及应用需要多长时间,实质上是一个API设计问题,API设计是一个缓慢和复杂的过程。
从长远观点来看,我不知道XAML除了现在应用外,它还有走向何处。我们只有等待和观察。基于XAML的新事物的出现并有明晰的发展方向的那一刻也是WPF专门工具出现的时刻,这些工具扩展了可以从微软获得资源。
我认为我们将会看到更多的绘图工具支持,更多的于Bledn类似的第三方产品,例如,因为目前Blend是唯一可以实现相应功能的工具,它是面向WPF的,可用来构建WPF用户接口,而没有其他工具可以实现相同功能。当前所有支持XAML的产品都只有引入模式,你可以使Illustrator按照XAML输入,但这是一个单向旅途。
Blend 可以很好的运用XAML,因此最令人感兴趣的事情可能是看到更多使用XAML的工具,而且这些工具可以从本质上理解XAML。竞争产品或者像Blend所作的一样,或者扩展应用空间,这些工具可以帮助你更好的使用XAML。
现在我不能确切知道这些工具都可以做些什么,但是有广泛的应用空间,因为XAML易于解析,就是XML,易于阅读。所以,我期望看到人们创造的新东西。
最近,用于开发丰富互联网应用的可用平台有很多选项,这也是WPF的目标之一。为什么开发人员选择WPF而不是比如Apollo或XULRunner?
当然,这取决于你的目标平台的需要,因为有些应用领域你可以只使用Windows平台就可以了,尤其是如果你正在构建一个丰富应用但又有一个有限应用范围的应用时:比如如果你确切的知道那些人会运行该应用。
今年早些时候我做的最后一个项目就是这样情况,我们要开发一个在线应用系统,但它只是一个邀请形式的应用,所以我们可以准确地知道那些地方会运行它。
这样,我们就可以缩小平台,你可以用图形完成所有这些事情,但我们更接近,我们使用视频做这些,我们可以进行高级定义。如果你的范围太广的话,所有这些事情可能都很难完成。
这是典型的最小公分母与缩小范围的问题,你需要进行选择是这一个还是另一个。因为WPF处于高端,它假定你是在运行.NET 3.0和相对最新的Windows的机器上工作。
因此,你已经准备好使用WPF。你已经决定将你限制在那个范围内并开始利用它。然而,如果你着眼于范围更广的东西,你就会利用更多的机器,但同时你必须为此放弃一些东西,这里面总有一个折中的问题。因此,WPF相对有趣只是因为它有些极端。
Windows表示层编程框架(Windows Presentation Foundation(WPF))是.NET3.0中最重要的开发环境,在这篇访谈中,Ian Griffiths将介绍WPF和Silverlight的相关内容,以及微软在软件框架上的竞争策略。
我们会不会看到这些软件巨头之间展开系统平台战争和新的浏览器战争呢?
很明显,所有的业界厂商都在积极筹备。Adobe不能错过这样的机会,他们的定位很明确——Flash,在这方面,Adobe比微软具备先发优势,也就是说他们已经占据了先机。
尽管微软推出了Silverlight,但是安装了Silverlight的电脑数量远远比不上安装了Flash的电脑,而且在未来的很长一段时间中还会继续保持这样的状态。
当然,微软想控制一切他们可以控制的事情,在操作系统领域,微软就是这样的策略,覆盖的电脑越多就对他们越有利。
现在两位软件巨人正在争夺同一领地,而且Google也正在加入竞争者的行列,尽管Google使用了AJAX技术,与微软和Adobe的方法不同,但是他们的基本想法是相同的。
不过这几家公司的产品发布模式和商业模式是不同的,所以现在成败还很难讲,他们都很强大,而且都在试图通过各种途径进入用户的桌面。现在是一个很有意思的竞争阶段,尽管目前无法断定这些产品将会走向何方,但可以肯定的是未来的竞争将会非常激烈。
微软控制了操作系统领域,您觉得这会给他们带来网络浏览器竞争上的领先地位么?
我觉得这是一个很大的优势,但是微软也受到很多限制,不可能没有限制地使用这些优势,否则又会有法律上的麻烦了。
在美国和欧盟的法律体系上,已经证明了只要有一点点机会,那么击败微软将是一件很容易的事情。比如,微软如果将Silverlight当作软件升级来发布,这种做法是不允许的,微软对这样的界限很明确,因此必须要很小心地来利用手中的这些优势,必须保证不会被视为借助垄断地位来捆绑产品。
我想这也是恰恰是Google和Adobe的优势所在,Google占据了统治地位,但是不是垄断者,因为改变搜索引擎是一件很容易的事情,其实Google是一个很经典的例子,最初出现的时候并不出名,但是最终击败了所有的对手。
Adobe的地位与Google相当,因为没有人认为Adobe是垄断者,我觉得Flash是一个很有意思的平台,如果有人针对Flash展开反垄断的法律诉讼,会发生什么样的事情呢?也许真的有这样的官司,但是我并不是律师,对于这些法律上的事情也不是很清楚,但如果我是Adobe的话,我是不会因为利用垄断地位侵犯竞争对手的事情担心的。
您认为未来的趋势是从桌面软件向互联网软件转移还是从互联网软件向桌面软件转移?
这是一个很有意思的问题,有些人认为基于互联网的应用软件一定会赢,只是时间的问题,因为这些软件可以提供桌面软件所提供的一切功能。
Paul Graham是一位著名的风险投资家,最近他在一篇文章中表示微软已经死了。当然这不是指财务上的问题,微软的财力可以支撑很长的时间,就像当年的IBM一样,但是他认为从技术角度上讲,Web的成功已经说明了这个问题。
当然,他从Web2.0的投资中获得了巨大的成功。但事实上,对这个问题下定论是很困难的,因为我的背景是胖客户端的开发、用于媒体广播的数字电视,因此我对视觉效果的质量非常在意。
所以对于我所要求的外观质量和用户的交互性质量而言,现在的基于Web的软件都很垃圾,从可用性的角度来说,它们几乎无法使用。
比如在Paul Graham的文章中提到了桌面应用软件正在被基于互联网的应用软件赶超,甚至连Photoshop也包含在内,我想…“这是真的么?”于是我打开在线照片编辑的链接,准备试试看到底功能如何。
首先,我从数码相机中把照片上传到网站上,和我的数码相机附带的Photoshop Elements 软件相比,在线应用软件并没有任何的优异之处。
好的,接下来,我能做什么事情呢?我可以剪裁、缩放照片并使用一键改善功能。但是对于我来说,这并不是一个可以替代Photoshop的软件,比如,我需要清除镜头上的手印,这是我经常要做的一件事情;而且在线软件也没有提供控制照片的亮度和对比度的功能。
对于这些基于互联网的在线软件而言,最大的问题是它们极其缓慢的速度,这是因为大量的数据操作受到网络速度的瓶颈限制。
也许十年之后我们会拥有200兆的网络接入速度,那么速度就不再成为问题,但是对目前而言,这一点是在线软件最大的弱点。
另外的一个问题就是延迟,带宽问题可以慢慢改善,但是延迟却永远都无法解决,您不能将悉尼和伦敦移动到一起,因此延迟总会存在,在线软件需要对延迟制定相应的规则来进行控制。
刚才提到过我的评审角度是要求完美,对于媒体广播而言,可能有数以百万计的观众,你必须认真对待,否则就不要在这个行业中工作。
也许您觉得对于桌面软件而言,并不需要如此的完美,那么这个问题就变成“对于大多数人而言,基于互联网的在线软件是不是已经足够好了呢?桌面软件所具备的优势是不是对除了我这样的极客之外的用户都不重要呢?”我觉得这个问题的正确答案至少价值十亿美元。
对于有些领域的应用软件而言,他们已经做到了这一点,我的一些朋友就喜欢使用Gmail而放弃了Outlook。
但这对我并不适用,因为我有很多时间都在世界各地飞来飞去,但是Gmail在飞机上无法使用。如果您的网络连接并不稳定,一会儿连得上,一会儿连接不上网络,那么网络就无法提供您需要的信息了。
您需要在客户端保存一定的信息来保证您的正常工作,我的个人数据有1G,其中一半是我的电子邮件,我需要经常使用其中的信息并保持同步。我的建议是,除非您具备永久在线的网络连接,否则完全依赖网络空间并不是一个很好的主意。
当然,对于重要数据的备份确实很重要,在网上浏览电子邮件也是非常有意义的,这样我就不用时刻担心我的笔记本电脑里的那块脆弱的2.5英寸硬盘会坏掉。
因为电子邮件都存储在本地电脑之外,这样我就可以格式化硬盘,重新安装Windows操作系统,然后我的邮件又会重新出现,这的确很棒。
但这并不是网络与桌面应用软件的区别,不过这个电子邮件的例子说明了一个重要问题:如果将桌面软件和在线软件的优势结合起来就可以充分发挥出两者的强大功能。
就我个人而言,在线软件有太多的缺点,而且根本性的技术问题很难克服,除非我们解决了网络速度的问题。
但现在其实有不少可以解决的问题却并没有引起注意,毕竟带宽的问题是一个相对缓慢的发展进程,尤其是我们要求每个人都拥有视频播放的带宽,那么下一次网络升级的驱动力是什么呢?除非有特殊的事情带来新的投资,并且有足够的理由相信新的网络应用软件确实需要10M的带宽。
未来如何,现在还很难预言,这类问题从来都很难预言,我个人认为在线软件现在还很不成熟,因为我对这些无法实现预期功能的东西很反感,即使我发现自己在这个问题上处于少数派,我也不会感到很惊讶。
您最近出席了很多软件开发者的培训,您被问到最多的问题是什么?
我应该使用WPF么?我的意思是很多参加培训的人都很关心现在是不是转换的时机,因为在没有使用过一项技术之前很难做出决定。
大家还非常关心微软对于Silverlight的策略问题,开发者希望构建具备整个网站功能的单个网页,同时这个网页可以像多媒体桌面软件一样华丽。这样的事情还没有发生,而且我还没有看到有任何的方法可以让这样的事情成为现实,不过可以肯定的是对这种事情的需求很高。
对于微软而言,他们会继续向这个领域发展,因为他们知道人们需要的是什么,只有当他们越走越近的时候,这些事情才有可能成为现实。这个领域现在吸引了很多人的参与,网络应用与胖客户软件系统会越走越近,不过在一种混乱的环境下,大家都处在一种迷失的状态。
那么现在是转换的时机么?
这完全取决于您现在做的事情是什么。如果您正在构建的应用软件将会从新技术中获益,而且所需要的功能离不开WPF的支持,那么答案是“是”。
如果您正在编写的是商业数据录入软件,那么答案是“否”。因为到目前为止,开发工具的支持还没有完成,而且微软也没有正式发布官方的开发工具,一切都只是XAML——您需要手动输入这些标记或者使用尚未正式发布的软件工具。
不过混合了这些技术的开发工具很快就要发布了,短则几周,长则几个月就会发布,我感觉这些预览版的功能已经很全面了,正式版的状态会更好,这一开发工具是完全面向开发者的,用起来很顺手,比起手动输入XAML来要便捷多了。
Visual Studio也会有更新的发展,最近发布了Orcas的beta1版,这一版本VS将是正式支持WPF的第一个版本,我个人并不认为它会提供丰富的开发设计体验,因为它只是为了尽快为WPF的开发者提供一些有用的东西,而不必等待好几年才推出新版本。
我想我们会看到微软更坚实的脚步,以后会提供比现在更好的东西,不过更大的突破至少要等到下一个发布版本了。
如果您已经在使用Windows Form了,并且正在开发的过程中,那么我想现在并不是转换的时机,因为您并不需要WPF提供的任何新特色,当然,数据绑定可能是个例外。
WPF的数据绑定比Windows Form要好很多,很多人仅仅因为这个原因就转换到了WPF,还有一些开发者使用了混合模式,软件主体使用Windows Form而在中间层使用了一些WPF的数据绑定。
这可能是个艰难的决定,因为您需要找到愿意使用两种平台的开发者,这可能会增加您的成本,但是这种方法确实很有效。
比较麻烦的问题是那些构建具有复杂的图形功能的软件,他们可能从WPF中获益,但是在Windows Form也可以实现同样的功能。
我觉得这取决于您目前处在产品的生命周期的什么位置,如果您的产品在市场上已经存在很多年了,那么现在并不是转换的好时机,您需要仔细考虑产品转换的策略;如果您正在考虑新产品或者重大的产品升级,那么使用WPF是个不错的主意。
如果您正在考虑使用.NET进行开发,那么这又是个复杂的选择,如果您选择了WPF,您需要注意的是现在可供使用的开发工具还没有完成。
但是如果您正在策划未来五年到十年的产品策略,您愿意将新产品寄托在Windows Form上么?很多公司都认为现在并不是使用Windows Form进行新的开发项目的时机。
尽管Windows Form可以非常好地完成既定的任务,但是很多新技术已经展现出曙光,在MFC上曾经发生的事情,现在将会在Windows Form上重演。
因此,对我而言,使用Windows Form进行全新的开发看上去是一件风险很大的事情,这样做会把您套牢在过时的系统平台上。很多参加培训的人和业界公司都得出了这样的结论。
同样,我们知道现在进行转换还为时过早,但是我们需要进行转换因为WPF具备超出Windows Form的新功能。尽管这是一个艰难的决定,但是WPF提供的新特色远远超出Windows Form,在未来的很多年中,WPF会日益完善,功能日益强大,但是目前是这一转换的痛苦的磨合期。