在過去十年中,我們看到了應用程式開發模型形成了兩個分支 — 傳統的“智能用戶端”安裝應用程式和基於 Web 的應用程式,兩者都為了在開發界內佔據統治地位而展開競爭。這兩個模型都要求開發人員犧牲在另一個模型中被視為理所當然的功能。Web 應用程式提供了更大的作用範圍、更簡單的部署和簡易性,以彌補狀態的丟失、更為複雜的開發模型以及整合度較低的平台體驗(儘管最近重新發現了諸如 AJAX 這樣的技術)等缺點。另一方面,Windows 領域使人們開發的應用程式有希望離線工作並充分利用用戶端硬體,但喪失了部署的簡易性以及可用於 Web 應用程式的無數種圖章工具支援。能夠提供獨立的、基於瀏覽器的應用程式、簡易的部署、出色的工具支援和深度平台整合的用戶端應用程式模型具有明顯的作用。
自從在 Windows 的第一個版本中首次出現以來,構成 Windows 使用者體驗核心的圖形子系統(USER32 和 GDI 庫)實際上已經誕生了將近二十年。當然,隨著時間的推移,USER32 和 GDI 經曆了重大的演變和發展,並且在所有領域都引入了很多新的服務和功能。 同時,還出現了諸如 Direct3D 這樣的新呈現技術,這些技術能夠充分利用在最新的視訊卡中公開的圖形功能。但是,目前的大多數主流應用程式都沒有提供這些圖形卡實現的體驗。
Windows Presentation Foundation
Windows Presentation Foundation(以前稱為“Avalon”)是 Windows 中新的關鍵圖形子系統,它為使用者介面、2D 和 3D 圖形、文檔和媒體提供了統一的方法。它在 .NET Framework 基礎上產生,並利用 Direct3D 進行基於向量的呈現,為產生所有種類的浸入式應用程式提供了強大的解決方案。另外,Windows Presentation Foundation 通過提供宣告式程式設計模型來實現“工具性”和靈活性,從而使設計人員成為開發過程不可分割的組成部分。
表 1. Windows Presentation Foundation 服務 |
基本服務 |
XAML, Property System, Input & Eventing, Accessibility |
媒體服務 |
2D, 3D, Audio, Video, Text, Imaging, Animation, Effects, Composition Engine |
文檔服務 |
XPS Documents, Open Packaging Conventions |
使用者介面服務 |
Application Services, Deployment, Controls, Layout, Data Binding |
可按照如下方式對 Windows Presentation Foundation 背後的設計原則進行分類:
·繼承:Windows Presentation Foundation 提供橫跨表 1 中所識別服務的統一 API。如今的開發人員面臨著無數種不同技術和 API 的選擇,具體取決於他們是面向 2D 圖形(GDI 或 GDI+)、使用者介面(USER32 或 Windows 表單)、媒體 (DirectShow) 還是 3D(Direct3D 或 OpenGL)。Windows Presentation Foundation 提供了一個與上述所有服務正交的單個模型,並允許將內容無縫地整合到單個應用程式。可使用相同的構造來實現動畫、資料繫結和樣式設定,而無需顧及是面向 2D、3D 還是常值內容。
·向量圖形。正如引言所述,Windows Presentation Foundation 充分利用了作為現代 PC 系統的組成部分的強大的圖形處理器。本質上,組合引擎基於向量,允許對所有輸出進行縮放以便與特定電腦的解析度匹配。呈現體繫結構使用 Direct3D 來完成所有輸出:在使用硬體實現 DirectX 7 或更高版本的視訊卡上,Windows Presentation Foundation 儘可能地使用 GPU 來呈現輸出。在無法使用硬體呈現的情況下,可以退而求其次使用軟體呈現。最後,浮點邏輯像素系統和 32 位 ARGB 顏色支援提供豐富的、預見到未來技術需要(如高 DPI 顯示器)的高保真體驗。
·宣告式程式設計。Windows Presentation Foundation 引入 XAML(可擴充應用程式標記語言),這是一種基於 XML 的語言,用於執行個體化和填充嵌套對象階層。儘管 XAML 並非專門局限於 Windows Presentation Foundation,但它本質上是適合於諸如 UI 定義和構建這樣的任務的。XAML 的設計使應用程式可在運行時分析和操縱動態工作流程方案的 UI 邏輯。重要的是,Windows Presentation Foundation 中體現的 XAML/程式碼後置模型使設計人員和開發人員可使用諸如 Expression“Sparkle”這樣的工具以及第三方專家工具(包括 ZAM 3D 和 Mobiform Aurora),相互協作來完成用戶端應用程式的設計和開發。
·簡易的部署。通過對獨立應用程式和 網頁瀏覽器應用程式的支援,Windows Presentation Foundation 提供兩種部署模型中的最佳模型。網頁瀏覽器應用程式從 Internet Explorer 內部運行 — 佔據整個視窗或在嵌入式架構中。它們提供 Web 應用程式所聞名的易於部署的特點,並且在部分信任沙箱內操作(沙箱能夠防止用戶端電腦受到惡意應用程式的侵害)。然而,它們仍然可以利用本地用戶端硬體,並使用 3D 和媒體服務獲得目前可以得到的最豐富的 Web 體驗。另一方面,獨立應用程式通過 ClickOnce 或 MSI 技術在本地安裝,並且提供對基礎平台的完全訪問。
·文檔生存周期。Windows Presentation Foundation 引入一組新的文檔和列印技術。需要將資料永久儲存在本機存放區區的應用程式可以使用 Open Packaging Conventions(開放式封裝慣例)— 這是一種與 Office 12 共用的基於 ZIP 的打包約定,它支援核心屬性和自訂中繼資料、數位簽章以及許可權管理功能。對於希望共用文檔以便在多台電腦(即使未安裝相應的應用程式)之間進行協作的應用程式而言,XML Paper Specification(XML 檔案規格)允許以可列印、可移植的格式確立視覺效果。
圖1 顯示的體繫結構關係表徵圖識 Windows Presentation Foundation 的主要組件。(請注意,方框的大小不代表各個組件的相對大小或重要性。)
圖 1. Windows Presentation Foundation 體繫結構 |
在頂層,Presentation Framework 提供了一個託管 API,它提供對基礎功能的完全訪問。絕大多數 Windows Presentation Foundation 開發人員都將專門使用這一層。該架構套件含大量標準控制項(如 Button、Label、Menu);布局面板;2D 和 3D 圖形和文本基元;對影像處理效果、媒體、動畫和文檔服務的支援;以及對與 GDI、DirectX 和 Windows 表單/GDI+ 之間的互通性的支援。
Windows Presentation Foundation 的真正主力是可視系統。Windows Presentation Foundation 中的大多數元素都派生自一個 Visual 基類。可視系統組合所有資料併產生螢幕輸出。我們就是在這裡將視頻和音頻、2D、3D 和動畫整合在一起,並提供某些文本布局服務。位於該體繫結構模型較低位置的是組合引擎,它負責在螢幕中呈現一個視覺化樹狀結構,並考慮從透明層到視窗地區無效的所有方面。
Windows Presentation Foundation 中的所有呈現操作均通過 Direct3D 完成(實際上,Windows Vista 硬體徽標程式需要 DirectX 9 的 GPU)。通過將更多的圖形處理操作移動到 GPU 中,我們可以讓 CPU 有能力完成其他工作,從而提高效能,同時改善圖形的品質。然而,這些優點並不局限於 3D 領域 — 2D 圖形也利用了相同的服務;Windows Presentation Foundation 內部未使用 GDI(除非與舊式元素整合)。對於安裝有 Windows Vista 的電腦而言,新的顯示驅動程式模型提供了優質的輸出,從而使媒體密集型應用程式獲得較高的效能。