Swift - RxSwift的使用詳解51(MVVM架構(gòu)演示1:基本介紹、與MVC比較)

? ? ? ? RxSwift 結(jié)合 MVVM 簡(jiǎn)直太合適不過了,或者說 RxSwift 就是為 MVVM 而生。在演示 MVVM 架構(gòu)樣例之前,我先簡(jiǎn)單地介紹下 MVVM 的一些基本概念,并與傳統(tǒng)的 MVC 架構(gòu)做個(gè)比較。

一、MVC 架構(gòu)

1,基本介紹

(1)MVCModel-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)通常情況下,ModelView 之間是不允許直接通信的,而必須由 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 的角色。
  • ModelViewController 中又可以直接與 View 進(jìn)行交互。

一旦 App 的交互復(fù)雜些,就會(huì)發(fā)現(xiàn) ViewController 將變得十分臃腫。大量代碼被添加到控制器中,使得控制器負(fù)擔(dān)過重。同時(shí) ViewController 混在一起,也不容易實(shí)現(xiàn) View 層的復(fù)用。

二、MVVM 架構(gòu)

1,基本介紹

(1)MVVMModel-View-ViewModel 的縮寫。MVVM 可以說是是 MVC 模式的升級(jí)版:

  • MVVM 增加了 ViewModel 層。我們可以將原來 Controller 中的業(yè)務(wù)邏輯抽取出來放到 ViewModel 中,從而大大減輕了 ViewController 的負(fù)擔(dān)。
  • 同時(shí)在 MVVM 中,ViewController 只擔(dān)任 View 的角色(ViewControllerView 現(xiàn)在共同作為 View 層),負(fù)責(zé) View 的顯示和更新,其他業(yè)務(wù)邏輯不再需要 ViewController 來管了。

(2)同樣使用 MVVM 架構(gòu)時(shí),ModelView|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í)的。比如 ViewViewModel 之間的數(shù)據(jù)綁定,如果駕馭不好,同樣會(huì)造成代碼邏輯復(fù)雜,不易維護(hù)的問題。但我想年輕人還是要有顆擁抱變化的心。不要守舊、不要排斥新技術(shù),這樣才能不斷進(jìn)步,不會(huì)被時(shí)代給淘汰。

RxSwift使用詳解系列
原文出自:www.hangge.com轉(zhuǎn)載請(qǐng)保留原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容