Share via


第 2 部分 - 架構

建置跨平臺應用程式的關鍵原則是建立一個架構,以充分利用跨平臺的程式代碼共用。 遵循下列面向物件程式設計原則有助於建置架構良好的應用程式:

  • 封裝 – 確保類別甚至架構層只會公開執行其必要函式的最低 API,並隱藏實作詳細數據。 在類別層級,這表示對象的行為為「黑匣子」,而取用程序代碼不需要知道它們如何完成其工作。 在架構層級,這表示實作外觀之類的模式,以鼓勵簡化的 API,以更抽象層代表程式代碼協調更複雜的互動。 這表示UI程式代碼(例如)應該只負責顯示畫面並接受用戶輸入;和 永遠不會直接與資料庫互動。 同樣地,數據存取程式代碼應該只讀取和寫入資料庫,但絕不會直接與按鈕或標籤互動。
  • 責任分離 – 確保每個元件(在架構和類別層級)都有清楚且妥善定義的用途。 每個元件都應該只執行其已定義的工作,並透過 API 公開該功能,此 API 可供其他需要使用它的類別存取。
  • 多型 – 對支援多個實作的介面(或抽象類)進行程序設計,表示核心程序代碼可以跨平臺撰寫和共用,同時仍與平臺特定功能互動。

自然結果是在真實世界或具有個別邏輯層的抽象實體之後建立模型的應用程式。 將程式代碼分成層,可讓應用程式更容易瞭解、測試和維護。 建議每一層中的程式代碼會以實體方式分隔(無論是在目錄中,甚至是非常大型應用程式的個別專案),以及以邏輯方式分隔(使用命名空間)。

一般應用層

在本檔中,我們參考下列六個應用層的案例研究:

  • 數據層 – 非揮發性數據持續性,可能是 SQLite 資料庫,但可以使用 XML 檔案或任何其他適當的機制來實作。
  • 數據存取層 – 資料層 周圍的包裝函式,提供對數據的建立、讀取、更新、刪除 (CRUD) 存取權,而不需向呼叫端公開實作詳細數據。 例如,DAL 可能包含 SQL 語句來查詢或更新數據,但參考程式代碼不需要知道這一點。
  • 商務層 – (有時稱為商業規則層 或 BLL) 包含商業實體定義 (模型) 和商業規則。 商務外觀模式的候選專案。
  • 服務存取層 – 用來存取雲端中的服務:從複雜的 Web 服務(REST、JSON、WCF)到從遠端伺服器輕鬆擷取數據和影像。 封裝網路行為,並提供應用程式與UI層所取用的簡單API。
  • 應用層 – 通常是平臺特定的程式代碼(通常不會跨平台共用)或應用程式專屬的程式碼(通常不可重複使用)。 在應用層與UI層中放置程式代碼的好測試是(a) 來判斷類別是否有任何實際的顯示控件,或 (b) 是否可以在多個螢幕或裝置之間共用它(例如 i 電話 和 iPad)。
  • 使用者介面 (UI) 層 – 使用者面向層 包含螢幕、小工具及管理它們的控制器。

應用程式不一定包含所有層,例如服務存取層不存在於無法存取網路資源的應用程式中。 非常簡單的應用程式可能會合併數據層和數據存取層,因為作業非常基本。

常見的行動軟體模式

模式是擷取常見問題週期性解決方案的既定方式。 在建置可維護/可理解的行動應用程式時,有幾個重要模式很實用。

  • Model、View、ViewModel (MVVM) – Model-View-ViewModel 模式很受支持數據系結的架構,例如 Xamarin.Forms。 它是由已啟用 XAML 的 SDK 所推廣,例如 Windows Presentation Foundation (WPF) 和 Silverlight;其中 ViewModel 會透過數據系結和命令,在資料 (Model) 與使用者介面之間做為之間的切換。
  • 模型、檢視、控制器 (MVC) – 常見且經常被誤解的模式,MVC 最常用於建置使用者介面,並提供 UI 畫面的實際定義(檢視)、處理互動的引擎(控制器)和填入它的數據之間的分隔。 模型實際上是一個完全選擇性的部分,因此,瞭解此模式的核心在於檢視和控制器。 MVC 是iOS應用程式的熱門方法。
  • 商務外觀 – AKA Manager 模式,為複雜工作提供簡化的進入點。 例如,在 「工作追蹤」應用程式中,您可能會有一個TaskManager類別,其中包含 、、 SaveTask (task) 等方法 GetTask(taskID)GetAllTasks() 。類別TaskManager為實際儲存/擷取工作對象的內部工作提供外觀。
  • Singleton – Singleton 模式提供一種方式,其中只有特定對象的單一實例可以存在。 例如,在行動應用程式中使用 SQLite 時,您只想要一個資料庫的實例。 使用Singleton模式是確保這一點的簡單方式。
  • 提供者 – Microsoft 所創造的模式(可以說類似於策略或基本相依性插入),以鼓勵跨 Silverlight、WPF 和 WinForms 應用程式重複使用程式代碼。 共用程式代碼可以針對介面或抽象類撰寫,而平臺特定的具體實作會在使用程式代碼時寫入並傳入。
  • Async – 不要與 Async 關鍵詞混淆,在需要執行長時間執行的工作而不保留 UI 或目前的處理時,會使用異步模式。 在最簡單的形式中,異步模式只會描述應該在另一個線程中啟動長時間執行的工作(或類似的線程抽象概念,例如Task),而目前線程會繼續處理並接聽背景進程的回應,然後在傳回數據和或狀態時更新UI。

每個模式將更詳細地檢查,因為他們的實際使用在案例研究中說明。 維琪百科有MVVM、MVCFacade、Singleton策略和提供者模式(以及一般設計模式)的詳細描述