** 很久以前的一篇文章,当初应该是《程序员》的稿子,有没有发表我就已经忘记了,今年在整理的过程中突然找到了,也不知道里面的观点是否正确,仅仅当着一个过去的思考,关于 ** ** 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 而言,拥有更加广阔的空间。
- 布局选项
可以采用 Windows 传统的点阵布局,同时支持 HTML 风格的流式布局。 FlowPanel,DockPanel,TextPanel 等等各个元素能够满足你开发过程中的大部分要求。
- 事件处理
基于 Windows 的应用程序不仅仅是为了显示 Web 页,它们需要以非常专门的方式响应用户界面事件。这种情况下,必须由实际的编程代码对 XAML 进行补充。您可以将这种代码放到单独的文件中,也可以将其直接嵌入到 XAML 中。
- 元素和对象
如果页面上面有多个元素,你可以采用和 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>