傳統型應用程式移植指引

大部分的應用程式程式代碼都可以分類為下列其中一個區域:

  • 使用者介面程式代碼(例如視窗和按鈕)
  • 第三方控制件(例如圖表)
  • 商務規則(例如驗證規則)
  • 本機數據儲存和存取
  • Web 服務和遠端訪問

對於使用 C# 撰寫的 Windows Forms 和 WPF 應用程式 Basic.NET,可以跨平臺共用大量商業規則、本機數據存取和 Web 服務程式代碼。

.NET Portability Analyzer

Visual Studio 2017 和更新版本支援 .NET 可移植性分析器適用於 Windows 的下載),可檢查您現有的應用程式,並告訴您可以將多少程式代碼移植到其他平臺。

您也可以從 GitHub 上的 Portability Analyzer 下載命令行工具,並用來提供相同的報告。

「我的程式代碼 x% 是可攜式的。 接下來該怎麼辦?

希望分析器顯示大部分的程式代碼是可攜式的,但每個無法移至其他平台的應用程式肯定會有一些部分。

以下更詳細地說明不同的程式碼區塊可能會落入下列其中一個貯體:

  • 可重複使用的可攜式程序代碼
  • 需要變更的程序代碼
  • 無法移植且需要重新寫入的程序代碼

可重複使用的可攜式程序代碼

針對所有平臺上可用的 API 所撰寫的 .NET 程式代碼,可以變更跨平臺。 在理想情況下,您可以將所有程式代碼移至可攜式類別庫、共用連結庫或 .NET 標準連結庫,然後在現有的應用程式中進行測試。

然後,該共用連結庫可以新增至其他平臺的應用程式專案(例如 Android、iOS、macOS)。

需要變更的程序代碼

某些 .NET API 可能無法在所有平臺上使用。 如果您的程式代碼中有這些 API,您必須重新撰寫這些區段以使用跨平臺 API。

其中範例包括使用 .NET 4.6 中提供的 反思 API,但無法在所有平臺上使用。

使用可攜式 API 重新撰寫程式代碼之後,您應該能夠在共用連結庫中封裝該程式代碼,並在現有的應用程式中進行測試。

無法移植且需要重新寫入的程序代碼

可能不是跨平臺的程式代碼範例包括:

  • 使用者介面 – 例如,Windows Forms 或 WPF 畫面不能用於 Android 或 iOS 上的專案。 您必須重新撰寫使用者介面,使用此 控件比較 做為參考。

  • 平臺特定記憶體 - 依賴平臺特定技術的程式代碼(例如本機 SQL Server Express 資料庫)。 您必須使用跨平臺替代專案來重新撰寫此作業(例如資料庫引擎的 SQLite)。 某些文件系統作業可能也需要調整,因為 UWP 對 Android 和 iOS 有稍微不同的 API(例如,有些文件系統區分大小寫,其他則不區分大小寫)。

  • 第三方元件 – 檢查應用程式中的第三方元件是否可在其他平臺上使用。 某些套件,例如非視覺 NuGet 套件,可能可用,但其他套件(尤其是圖表或媒體播放機等視覺控件)

用於讓程式代碼可攜式 提示

  • 相依性插入 – 為每個平臺提供不同的實作,以及

  • 分層方法 – MVVM、MVC、MVP 或其他一些模式可協助您將可攜式程式代碼與平臺特定程式代碼分開。

  • 傳訊 – 您可以使用傳入程式代碼的訊息來取消應用程式不同部分之間的互動。