Longhorn時代,瀏覽器的終結?——關於Avalon和XAML

Longhorn時代,瀏覽器的終結?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

——關於AvalonXAML

       寫完那場瀏覽器大戰,我內心始終無法平靜,也許是還沒有從場戲的情景走出來,相反於人類的和平,在技術“和平”的年代,的確有點苦悶,在這個高速發展的年代,我們居然被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.WindowsMSAvalon.Windows.ControlsMSAvalon.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 頁和託管過程代碼。您可以按自己的方式來組合它們,但這兩者的任何組合都是可以接受的。

AvalonXAML如何工作?

我們首先來看一個XAML的代碼,也就是最經典的“Hello World”程序。將如下的代碼存儲成HelloWorld.xaml就可以。

<TextPanel xmlns="http://schemas.microsoft.com/2003/xaml"

        Background="BlanchedAlmond"

        FontFamily="Comic sans MS"

        FontSize="<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />36pt"

        HorizontalAlignment="Center">

    Hello, world!

</TextPanel>

由於其中沒有代碼,因此您可以將 HelloWorld.xaml 文件直接加載到 Microsoft Internet Explorer Longhorn 版本中,然後您將看到類似於一個 Web 頁的內容。還可以使用一個目前稱作 MSBuild 的程序來編譯 HelloWorld.xaml。進行這種編譯時,還需要兩個其他的短文件(此處未顯示)。其中一個擴展名爲 PROJ MSPROJ 的文件會提供有關該程序的一些信息並列出所有必需的源文件(XAML 以及其他文件)。還需要另外一個 XAML 短文件來指出執行該程序時首先顯示哪個 XAML 頁。運行 Hello World 的可執行文件,您將看到一個類似於 Windows 程序的內容。圖 1 同時顯示了這兩個版本。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

從某種意義上面來說,XAMLHTML頁面非常相似,不過因爲是基於XML的,所以擁有了比較嚴格的規範,同時因爲在Avalon下執行,Longhorn整個操作系統成爲其容器,相對於IE而言,擁有更加廣闊的空間。

1)        佈局選項

可以採用Windows傳統的點陣佈局,同時支持HTML風格的流式佈局。FlowPanel,DockPanel,TextPanel等等各個元素能夠滿足你開發過程中的大部分要求。

2)        事件處理

基於 Windows 的應用程序不僅僅是爲了顯示 Web 頁,它們需要以非常專門的方式響應用戶界面事件。這種情況下,必須由實際的編程代碼對 XAML 進行補充。您可以將這種代碼放到單獨的文件中,也可以將其直接嵌入到 XAML 中。

3)        元素和對象

如果頁面上面有多個元素,你可以採用和HTML類似的模型來處理.DHTML通過window.event.srcElement這樣的方式來標識多個事件源,同一個處理邏輯,在XAML也可以同樣的實現。

 

XAML vs HTML,瀏覽器消失了?

       去做這樣的比較有點沒有意思,因爲這根本不是一個層次和概念上的比較,不過熟悉Web編程的朋友們應該也會發現,這個和HTML頁面是如此驚人的相似,開始的時候我甚至以爲沒有太多的區別,只是微軟招搖撞騙的幌子罷了。

       這次,我的確錯了,而且錯的離譜,至於原因如何,我會在後面的文字去做深刻的檢討,首先來看看誤導我的理由吧。

1.  默認的HTML佈局是Flow Layout的,不過CSS的後續支持能夠讓大部分的HTML元素設置style=”left:50px;top:30px;”這樣的屬性。

2.  事件處理比較經典的寫法是<button οnclick=”showMsg()” value=”ClickMe”>這樣的寫法。

3.  元素和對象可以通過DOM(Document Object Model)來訪問,對於相當一部分的HTML元素,是可以支持時間冒泡的,至於事件源,在DHTML開發中通過window.event.srcElement.這樣的屬性可以輕易的獲取,而需要攔截一些事件的冒泡通過window.event.cancelBubble=true就能夠取消源事件往上級容器傳遞。

 

我以爲這就是所謂的XAML,終於知道不是微軟在譁衆取寵,而是我太無知,那個Indigo,才讓我明白所謂Avalon和所謂XAML不是想象的如此簡單。Longhorn的應用模型是“一次編寫,n次部署”,Avalon作爲圖形展示引擎負責XML格式的XAML文件的圖形繪製,而真正底層工作的核心在於Indigo.  Indigo 的一個主要優點是,它會爲所有基於公共語言運行庫 (CLR) 的遠程技術提供一個統一的編程模型和協議棧。Indigo 會將 .NET RemotingASMXSystem.Messaging .NET Enterprise Services 的最佳功能結合到一個框架中,使得開發人員能夠自由組合各種功能,如聲明性事務處理、可插接式偵聽器和傳輸以及基於 XML 架構的序列化。一個應用程序的無縫部署是通過Indigo來完成的,因此那些XAML的代碼邏輯也是Indigo統一管理的,這個就是和HTML本身最大的區別,在傳統的瀏覽器上面,不管多複雜的腳本代碼,大部分都是爲了UI顯示而考慮的,任何系統級別的消息通信在瀏覽器這個容器都是受限的。

說到這裏,我們不得不提出另外一個問題,是桌面消失了還是瀏覽器消失了?在這個時候我首先認同的是可以考慮桌面的消失,因爲所有的代碼都可以通過Longhorn版本的瀏覽器下載然後編譯執行,那麼既然所有的應用都可以在瀏覽器運行,是不是考慮讓桌面應用退出歷史舞臺了,正當我爲自己天才的結論沾沾自喜的時候,突然發現連瀏覽器也一起消失了,是的,瀏覽器的概念也已經模糊了…….

從某種意義上來說,我們已經沒有桌面應用和瀏覽器應用的概念,通過編寫XAML,我可以可以任意的部署實現,這個時候,整個Longhorn就是一個本質意義上的瀏覽器容器,通信和調度通過Indigo來完成,而Avalon則用來完成UI的組織。

 

革命之後的思考

       從瀏覽器IE5的顛峯到IE6的雄霸天下,在整整一個時期之內我們都是在那樣的思想之下去考慮問題,包括應用及其體系結構本身,我們擁有曾出不窮的產品可以選擇,但是不管如何應用始終擺脫不了C/SB/S這兩大主流應用程序架構,雖然有很多的ArticheturePattern可以指導和補充我們現有的應用。不過依然無法擺脫兩個架構的侷限性,於是Thin Client還是Rich Client永遠是各大社區討論的熱點所在,一個可以看到改變的是.Net的所謂Smart Client的出現,MacromediaFlash技術也是一個從Rich Client àThin ClientàSmart Client演化過程中一個非常優秀的解決方案。

       而那個AvalonXAML的設計思想有點超出我能夠理解的範圍,那樣基於標記定義的語言,那樣的圖形引擎,會不會改變我們現有的思想,瀏覽器消失了還是永存?看今天的Longhorn,看看“折磨”,不知道你是否能夠得到另外的答案。

 

       寫在後面:

       說實話,寫這樣的文章讓我戰戰兢兢,總害怕在褻瀆什麼,對於XAML,沸沸揚揚之後“塵歸塵,土歸土”,我喜歡看到新技術的演變,雖然有些的改變讓我們有點無法接受,不過依然相信這種變革能夠提高生產力,從信息技術發展的歷程來看,舊有的技術總是會被新技術取代的,而瀏覽器,註定要被取代,至於是否我們今天提到的一些技術(所謂大統一的瀏覽器),那麼就需要時間去驗證了

 

 Eric Liu

2004519凌晨5點於京城

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章