Advanced iOS App Architecture (Second Edition): Real-World App Architecture in Swift


此次挑戰將撰寫 CH5 Architecture: MVVM 的重點摘要,增進自己對於 iOS 中 NVVM 架構的了解,並透過撰寫閱讀筆記的方式來內化所學。

Outline

  • What is MVVM
  • Model Layer
  • View Layer
  • View Model Layer
  • 總結

What is MVVM

Model-View-ViewModel (MVVM) 是目前 iOS 社群中新起的趨勢,在 MVVM 之前,iOS 開發者會需要寫大量的 View,這會造成 View 跟商業邏輯之間緊耦合。這造成了開發者在調整 View 時總是需要重寫程式碼。而 MVVM 的出現幫助開發者在更動 View 時更容易。

作者透過下面這張圖解釋 MVVM 的架構:

  • View 對 View Model 狀態的變更做出反應
  • View Model 則對 Model 狀態變更做出反應

接下來將深入介紹此三層:

Model Layer

Model Layer 主要負責所有 CRUD (Create, Read, Update, Delete)的操作,Model Layer 有以下兩種設計方式:

  • Push-and-pull
  • Observe-and-push

此兩種設計模式共同的都是 Push,Push 指 consumers 可以更新 Model Data,並且告訴 Model Layer Push。而 PullObserve 的差別在於是否會直接要求資料。

另外也可以使用 Repository Pattern,Repository 可以當做一個介面,提供 CRUD 方法供 Client 呼叫 API、持久層、memory cache。

View Layer

View 簡單來說就是使用者看到的介面,在 MVVM 上,View 的元素都是透過綁定 View Model 的 properties,所以 View 會根據 View Model 的狀態變化來做改變,View 只有在 View Model 狀態改變時才會更新畫面。

View Model Layer

View Model 可以將傳統 MVC 架構中 Controller 及 View 解耦,並且你可以替換任何的 View 而不需要更動 View Model;另外,透過這樣的解耦,你可以更容易地進行測試,可以針對 View Model 來做測試,而不需要考慮到 UI。

以下是 View Model 的結構:

  • View State:State 是透過 @Published 的 properties 建立,當 View Model 被建立時,UI 會註冊這些 Publishers
  • Task Methods:用來回應使用者的互動,想是呼叫 API 然後更新 Veiw State,因為 View State 改變了,所以會通知有註冊這些 Publishers 的 UI 元件
  • Dependencies:透過注入 initializer 來形成依賴,View Model 只會知道怎麼呼叫這些依賴,而不需要知道實作細節,符合依賴反轉原則

總結

這是我第一次撰寫閱讀筆記,這本書的難度相當的深,花了蠻久的時間來了解這一章節,一開始開發時是使用 MVC 架構,後來自己嘗試 MVVM 架構後覺得很不錯,但又想更深入了解,於是選了此本書來做挑戰,也期許自己能夠再將其他章節也閱讀完畢,並寫成文章來內化所學!

#iOS #mvvm #architecture #Reading note
Advanced iOS App Architecture (Second Edition): Real-World App Architecture in Swift
Advanced iOS App Architecture (Second Edition): Real-World App Architecture in Swift
作者 Cacheaux René Berlin Josh Tutorial Team Raywenderlich / 出版社 Razeware LLC

2019-12-02








你可能感興趣的文章

JavaScript 進階 05:this

JavaScript 進階 05:this

5. 實際開發 ToDo List 案例

5. 實際開發 ToDo List 案例

留言板、前端串接 API

留言板、前端串接 API






留言討論