此次挑戰將撰寫 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
。而 Pull
和 Observe
的差別在於是否會直接要求資料。
另外也可以使用 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
架構後覺得很不錯,但又想更深入了解,於是選了此本書來做挑戰,也期許自己能夠再將其他章節也閱讀完畢,並寫成文章來內化所學!
2019-12-02