Visual Studio 2012 為構建 Windows 8 和 Windows Phone 8 應用程式提供了一套出色的工具。因此,可以進 行適當的探究,以瞭解可在應用程式的 Windows 市集版本與 Windows Phone 版本之間共用多少代 碼。
您可以採用多種不同語言編寫 Windows 市集應用程式:XAML 搭配 C#、Visual Basic 、C++,甚至是 HTML5 搭配 JavaScript。
通常採用 XAML 搭配 C# 或 Visual Basic 來編寫 Windows Phone 8 應用程式,但 Windows Phone 8 SDK 現已支援採用 XAML 和 C++ 來編寫 Direct3D 應用程式。雖然 Windows Phone 8 SDK 還為基於 HTML5 的應用程式提供了模板,但它們只是基於 XAML 並藉助 WebBrowser 控制項託管基於 HTML5 的 Web 頁面。
在本文中,我將探討三種用於在 Windows 市集與 Windows Phone 應用程式之間共用代碼的策略: 可移植類庫 (PCL)、Windows 運 行時 (WinRT) 組件(以及 Windows Phone 運行時組件)和 Visual Studio 的“添加為連結”選項。您 可以在開發人員中心 (http://aka.ms/sharecode) 找到有關在 Windows 市集與 Windows Phone 應用 程式之間共用代碼的更多指導資訊。
值得注意的是,雖然 Windows 市集應用程式與 Windows Phone 應用程式之間有許多相似之處( 如動態磚),但是它們畢竟是不同的平台,因此應有針對性地專門設計 UX。
體繫結構
一般而言,那些提倡問題分割的體繫結構原則能夠提高可共用代碼的比例。如果已經採用了可 促進問題分割的模式,如模型-視圖-視圖模型 (MVVM) 或模型-視圖-控制器 (MVC),實現代碼共用較為 容易,此外,在體繫結構中採用依賴關係注入模式也有助於實現代碼共用。在進行新應用程式的體繫結 構設計時,請務必考慮採用此類模式,以提高可實現的代碼共用水平。對於現有應用程式,可以考慮重 構體繫結構,以促進問題分割,進而促進代碼共用。MVVM 或 MVC 除可實現問題分割外,還具備其他一 些優勢,例如:允許設計者和開發人員同時工作。在設計者藉助 Expression Blend 等工具進行 UX 設計 的同時,開發人員可在 Visual Studio 中編寫 UX 的具體實現代碼。
可移植類庫
Visual Studio 2012 中的 PCL 項目可實現跨平台開發,它允許為產生的程式集選擇要支援的目標框架。在 Visual Studio 2010 中作為可選附加元件引入的 PCL 項目模板現已包含在 Visual Studio Professional 2012 及更高版本中。
那麼,在 PCL 中可以共用哪些代碼呢?
PCL 之所以被稱為 PCL, 就是因為它可實現可移植代碼的共用,為使代碼能夠移植,其必須為採用 C# 或 Visual Basic 編寫的 Managed 程式碼。PCL 只產生單個二進位檔案,因此,可移植代碼不使用條件編譯指令,而是藉助介面或抽象 基類將平台特定的功能抽象出來。當可移植代碼需要與平台特定代碼互動時,可使用依賴關係注入模式 提供抽象的平台特定實現。編譯後,PCL 會產生單個程式集,以供基於目標框架的任意項目引用。
圖 1 顯示一個用 PCL 實現共用代碼的建議體繫結構方法。在 MVVM 模式中,視圖模型和模型與 任意平台特定功能的抽象一起包含在 PCL 中。Windows 市集和 Windows Phone 應用程式提供了任 意平台特定功能抽象的啟動邏輯、視圖和實現。雖然 MVVM 設計模式並非實現可移植代碼的必要條件, 但是該模式提倡的問題分割可產生乾淨、可擴充的體繫結構。
圖 1 藉助 MVVM 設計模式 共用代碼