Longhorn时代,浏览器的终结?——关于Avalon和XAML

** 很久以前的一篇文章,当初应该是《程序员》的稿子,有没有发表我就已经忘记了,今年在整理的过程中突然找到了,也不知道里面的观点是否正确,仅仅当着一个过去的思考,关于 ** ** Longhorn ** ** 的介绍,请参考《 ** ** MSDN ** ** 开发精选》第一期的特别策划 ** ** **

Longhorn 时代,浏览器的终结?

——关于 Avalon 和 XAML

写完那场浏览器大战,我内心始终无法平静,也许是还没有从场戏的情景走出来,相反于人类的和平,在技术“和平”的年代,的确有点苦闷,在这个高速发展的年代,我们居然被 IE 统治 2 年多的时间(确切的说应该是 IE5 出来以后就算,所以说应该算接近 5 年),我们需要一些新鲜的事物来刺激我们渐渐麻木的神经。

第一次听到 Longhorn 的时候有点稀里糊涂的,根本不知道这个叫着“长角”的家伙有何特异功能,值得那个帝国托付全部的家当,号称有三大创新技术的 Longhorn, 居然那些技术也有一些稀奇古怪的代号: Avalon,Indigo,WinFS ,不知道这玩意儿是不是将来的 Window .Net Server 2005 or/2006 。我们是不用去指望了,也许发布的他日真的会使用我预言的系统名称,也许又是一个代号,只是希望代号能够好听一点,能够好读一点,等到看到 XAML 的时候,我终于被这些代号折腾的不行了,本来应该发音“ zammel ”终于被我读成了“折磨”。

好了,言归正传, 代号为“ Longhorn ”的下一版 Microsoft® Windows® 操作系统都是一个重要的里程碑。“ Longhorn ”是第一个用托管代码构建的操作系统,而且首次采用了最新的存储子系统(代号为“ WinFS ”),这种存储系统是文件系统概念的一次革命。它还是第一个支持自然搜索技术 (Natural UI) 的操作系统,这种技术自动解决了查询文本固有的大量多义性问题。 Longhorn 包含 3 大革命性的技术,第一是代号为 "Avalon" 的图形和展示引擎,第二是代号为 "Indigo" 的新的通信架构,第三是代号为 "WinFS" 的新的文件系统。而代号为 Avalon 的图形展示引擎则是基于 XML 来展示的,而基于 Longhorn 的应用程序除了传统的 VB.Net,C# 可以编写之外,同时引入了一个新的 XAML 的语言。

什么是 Avalon

Avalon 是下一版本的 Windows (代号“ Longhorn ”)的一部分,主要由新加到 .NET 框架中的一组类集合而成。目前,用于 Avalon 编程的最重要的新命名空间有多个名称,例如, MSAvalon.Windows 、 MSAvalon.Windows.Controls 和 MSAvalon.Windows.Media (在 Longhorn 最终发布之前,这些名称将进行更改)。有了 Avalon ,您就可以利用 C# 、 Visual Basic® .NET 或者任何其他支持 .NET 公共语言规范 (CLS) 的语言编写应用程序。这些程序与目前可编写的 Windows 窗体应用程序颇为相似。即, Avalon 的 标准 部分。

什么是 XAML

Avalon 会定义一个可在 Longhorn 中使用的新标记语言,其代号为“ XAML ”(可扩展应用程序标记语言)。可以使用 XAML 来定义文本、图像和控件的布局,这与使用 HTML 非常相似。大多数写入 Avalon 的应用程序均可能同时包含程序代码和 XAML 。您将使用 XAML 定义应用程序初始的可视界面,并编写用于实现其他功能的代码。您可以将程序代码直接嵌入到 XAML 中,也可以将它保留在一个单独的文件内。能够用 XAML 实现的所有功能均可以通过程序代码实现。因此,根本无需使用任何 XAML 也有可能编写程序。但是,反之则不行;许多任务只能通过程序代码完成,因此,只有最简单的应用程序才会只包括 XAML 。

利用 XAML 元素,您可以控制每个页的布局,包括文本和图像的显示、插入按钮、文本框等交互式组件。总之, XAML 是用于以声明方式呈现构成应用程序的页的用户界面的语言。当然,除了使用 XAML ,您也可以完全使用过程代码来编写 Longhorn 的应用程序。一般来说,一个基于 Longhorn 的成功的应用程序会同时具备 XAML 页和托管过程代码。您可以按自己的方式来组合它们,但这两者的任何组合都是可以接受的。

Avalon 和 XAML 如何工作?

我们首先来看一个 XAML 的代码,也就是最经典的“ Hello World” 程序。将如下的代码存储成 HelloWorld.xaml 就可以。

1<textpanel background="BlanchedAlmond" fontfamily="Comic sans MS" fontsize="  36pt  " horizontalalignment="Center" xmlns="http://schemas.microsoft.com/2003/xaml">
2
3Hello, world! 
4
5</textpanel>

由于其中没有代码,因此您可以将 HelloWorld.xaml 文件直接加载到 Microsoft Internet Explorer 的 Longhorn 版本中,然后您将看到类似于一个 Web 页的内容。还可以使用一个目前称作 MSBuild 的程序来编译 HelloWorld.xaml 。进行这种编译时,还需要两个其他的短文件(此处未显示)。其中一个扩展名为 PROJ 或 MSPROJ 的文件会提供有关该程序的一些信息并列出所有必需的源文件( XAML 以及其他文件)。还需要另外一个 XAML 短文件来指出执行该程序时首先显示哪个 XAML 页。运行 Hello World 的可执行文件,您将看到一个类似于 Windows 程序的内容。图 1 同时显示了这两个版本。

图 1 Hello World 作为页面和作为程序

从某种意义上面来说 ,XAML 和 HTML 页面非常相似,不过因为是基于 XML 的,所以拥有了比较严格的规范,同时因为在 Avalon 下执行, Longhorn 整个操作系统成为其容器,相对于 IE 而言,拥有更加广阔的空间。

  1. 布局选项

可以采用 Windows 传统的点阵布局,同时支持 HTML 风格的流式布局。 FlowPanel,DockPanel,TextPanel 等等各个元素能够满足你开发过程中的大部分要求。

  1. 事件处理

基于 Windows 的应用程序不仅仅是为了显示 Web 页,它们需要以非常专门的方式响应用户界面事件。这种情况下,必须由实际的编程代码对 XAML 进行补充。您可以将这种代码放到单独的文件中,也可以将其直接嵌入到 XAML 中。

  1. 元素和对象

如果页面上面有多个元素,你可以采用和 HTML 类似的模型来处理 .DHTML 通过 window.event.srcElement 这样的方式来标识多个事件源,同一个处理逻辑,在 XAML 也可以同样的实现。

XAML vs HTML ,浏览器消失了?

去做这样的比较有点没有意思,因为这根本不是一个层次和概念上的比较,不过熟悉 Web 编程的朋友们应该也会发现,这个和 HTML 页面是如此惊人的相似,开始的时候我甚至以为没有太多的区别,只是微软招摇撞骗的幌子罢了。

这次,我的确错了,而且错的离谱,至于原因如何,我会在后面的文字去做深刻的检讨,首先来看看误导我的理由吧。

1. 默认的 HTML 布局是 Flow Layout 的,不过 CSS 的后续支持能够让大部分的 HTML 元素设置 style=”left:50px;top:30px;” 这样的属性。

2. 事件处理比较经典的写法是

 1<button onclick="”showMsg()”" value="”ClickMe”"> 这样的写法。 
 2
 33.  元素和对象可以通过  DOM(Document Object Model)  来访问,对于相当一部分的  HTML  元素,是可以支持时间冒泡的,至于事件源,在  DHTML  开发中通过  window.event.srcElement.  这样的属性可以轻易的获取,而需要拦截一些事件的冒泡通过  window.event.cancelBubble=true  就能够取消源事件往上级容器传递。 
 4
 5我以为这就是所谓的  XAML  ,终于知道不是微软在哗众取宠,而是我太无知,那个  Indigo  ,才让我明白所谓  Avalon  和所谓  XAML  不是想象的如此简单。  Longhorn  的应用模型是“一次编写,  n  次部署”,  Avalon  作为图形展示引擎负责  XML  格式的  XAML  文件的图形绘制,而真正底层工作的核心在于  Indigo.  Indigo  的一个主要优点是,它会为所有基于公共语言运行库  (CLR)  的远程技术提供一个统一的编程模型和协议栈。  Indigo  会将  .NET Remoting  、  ASMX  、  System.Messaging  和  .NET Enterprise Services  的最佳功能结合到一个框架中,使得开发人员能够自由组合各种功能,如声明性事务处理、可插接式侦听器和传输以及基于  XML  架构的序列化。一个应用程序的无缝部署是通过  Indigo  来完成的,因此那些  XAML  的代码逻辑也是  Indigo  统一管理的,这个就是和  HTML  本身最大的区别,在传统的浏览器上面,不管多复杂的脚本代码,大部分都是为了  UI  显示而考虑的,任何系统级别的消息通信在浏览器这个容器都是受限的。 
 6
 7说到这里,我们不得不提出另外一个问题,是桌面消失了还是浏览器消失了?在这个时候我首先认同的是可以考虑桌面的消失,因为所有的代码都可以通过  Longhorn  版本的浏览器下载然后编译执行,那么既然所有的应用都可以在浏览器运行,是不是考虑让桌面应用退出历史舞台了,正当我为自己天才的结论沾沾自喜的时候,突然发现连浏览器也一起消失了,是的,浏览器的概念也已经模糊了  ……. 
 8
 9从某种意义上来说,我们已经没有桌面应用和浏览器应用的概念,通过编写  XAML  ,我可以可以任意的部署实现,这个时候,整个  Longhorn  就是一个本质意义上的浏览器容器,通信和调度通过  Indigo  来完成,而  Avalon  则用来完成  UI  的组织。 
10
11## 
12
13#  革命之后的思考 
14
15从浏览器  IE5  的颠峰到  IE6  的雄霸天下,在整整一个时期之内我们都是在那样的思想之下去考虑问题,包括应用及其体系结构本身,我们拥有曾出不穷的产品可以选择,但是不管如何应用始终摆脱不了  C/S  ,  B/S  这两大主流应用程序架构,虽然有很多的  Articheture  和  Pattern  可以指导和补充我们现有的应用。不过依然无法摆脱两个架构的局限性,于是  Thin Client  还是  Rich Client  永远是各大社区讨论的热点所在,一个可以看到改变的是  .Net  的所谓  Smart Client  的出现,  Macromedia  的  Flash  技术也是一个从  Rich Client  à  Thin Client  à  Smart Client  演化过程中一个非常优秀的解决方案。 
16
17而那个  Avalon  和  XAML  的设计思想有点超出我能够理解的范围,那样基于标记定义的语言,那样的图形引擎,会不会改变我们现有的思想,浏览器消失了还是永存?看今天的  Longhorn  ,看看“折磨”,不知道你是否能够得到另外的答案。 
18
19写在后面: 
20
21说实话,写这样的文章让我战战兢兢,总害怕在亵渎什么,对于  XAML  ,沸沸扬扬之后“尘归尘,土归土”,我喜欢看到新技术的演变,虽然有些的改变让我们有点无法接受,不过依然相信这种变革能够提高生产力,从信息技术发展的历程来看,旧有的技术总是会被新技术取代的,而浏览器,注定要被取代,至于是否我们今天提到的一些技术(所谓大统一的浏览器),那么就需要时间去验证了 
22
23Eric Liu 
24
252004  年  5  月  19  日  凌晨  5  点于京城</button>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus