? ? ? ? RxSwift 結(jié)合 MVVM 簡(jiǎn)直太合適不過了,或者說 RxSwift 就是為 MVVM 而生。在演示 MVVM 架構(gòu)樣例之前,我先簡(jiǎn)單地介紹下 MVVM 的一些基本概念,并與傳統(tǒng)的 MVC 架構(gòu)做個(gè)比較。
一、MVC 架構(gòu)
1,基本介紹
(1)MVC 是 Model-View-Controller 的縮寫。它主要有如下三層結(jié)構(gòu):
-
Model:數(shù)據(jù)層。負(fù)責(zé)讀寫數(shù)據(jù),保存App狀態(tài)等。 -
View:界面顯示層。負(fù)責(zé)和用戶交互,向用戶顯示頁(yè)面,反饋用戶行為等。 -
Controller:業(yè)務(wù)邏輯層。負(fù)責(zé)業(yè)務(wù)邏輯、事件響應(yīng)、數(shù)據(jù)加工等工作。
(2)通常情況下,Model 與 View 之間是不允許直接通信的,而必須由 Controller 層進(jìn)行協(xié)調(diào)。

2,優(yōu)點(diǎn)
使用 MVC 架構(gòu)可以幫助我們很好地將數(shù)據(jù)、頁(yè)面、邏輯的代碼分離開來,使得每一層相對(duì)獨(dú)立。同時(shí)我們還能夠?qū)⒁恍┩ㄓ玫墓δ艹殡x出來,實(shí)現(xiàn)代碼復(fù)用。
3,缺點(diǎn)
雖然 MVC 架構(gòu)久經(jīng)考驗(yàn),但它并不是十分適合 iOS 項(xiàng)目的開發(fā)。因?yàn)樵?iOS 項(xiàng)目中:
-
ViewController既扮演了View的角色,又扮演了Controller的角色。 - 而
Model在ViewController中又可以直接與View進(jìn)行交互。
一旦 App 的交互復(fù)雜些,就會(huì)發(fā)現(xiàn) ViewController 將變得十分臃腫。大量代碼被添加到控制器中,使得控制器負(fù)擔(dān)過重。同時(shí) View 與 Controller 混在一起,也不容易實(shí)現(xiàn) View 層的復(fù)用。
二、MVVM 架構(gòu)
1,基本介紹
(1)MVVM 是 Model-View-ViewModel 的縮寫。MVVM 可以說是是 MVC 模式的升級(jí)版:
-
MVVM增加了ViewModel層。我們可以將原來Controller中的業(yè)務(wù)邏輯抽取出來放到ViewModel中,從而大大減輕了ViewController的負(fù)擔(dān)。 - 同時(shí)在
MVVM中,ViewController只擔(dān)任View的角色(ViewController與View現(xiàn)在共同作為View層),負(fù)責(zé)View的顯示和更新,其他業(yè)務(wù)邏輯不再需要ViewController來管了。
(2)同樣使用 MVVM 架構(gòu)時(shí),Model 與 View|ViewControllter 之間是不允許直接通信的,而是由 ViewModel 層進(jìn)行協(xié)調(diào)。

2,優(yōu)點(diǎn)
通過將原本在 ViewController 的視圖顯示邏輯、驗(yàn)證邏輯、網(wǎng)絡(luò)請(qǐng)求等代碼存放于 ViewModel 中:
- 一來可以對(duì)
ViewController進(jìn)行瘦身。 - 二來可以實(shí)現(xiàn)視圖邏輯的復(fù)用。比如一個(gè)
ViewModel可以綁定到不同的View上,讓多個(gè)view重用相同的視圖邏輯。 - 而且使用
MVVM可以大大降低代碼的耦合性,不僅方便測(cè)試、維護(hù),也方便多人協(xié)作開發(fā)。
3,缺點(diǎn)
(1)相較于 MVC,使用 MVVM 會(huì)輕微的增加代碼量。但總體上減少了代碼的復(fù)雜性,個(gè)人覺得還是值得的。
(2)還有就是學(xué)習(xí)成本。使用 MVVM 還是有許多地方要學(xué)習(xí)的。比如 View 與 ViewModel 之間的數(shù)據(jù)綁定,如果駕馭不好,同樣會(huì)造成代碼邏輯復(fù)雜,不易維護(hù)的問題。但我想年輕人還是要有顆擁抱變化的心。不要守舊、不要排斥新技術(shù),這樣才能不斷進(jìn)步,不會(huì)被時(shí)代給淘汰。