MVVM簡單使用

MVVM 是一種軟件架構(gòu)模式,它是 Martin Fowler 的 Presentation Model 的一種變體,最先由微軟的架構(gòu)師 John Gossman 在 2005 年提出,并應(yīng)用在微軟的 WPF 和 Silverlight 軟件開發(fā)中。MVVM 衍生于 MVC ,是對 MVC 的一種演進(jìn),它促進(jìn)了 UI 代碼與業(yè)務(wù)邏輯的分離。

MVC 與 MVVM 有什么異同點(diǎn),MVC 到 MVVM 是怎樣演進(jìn)的;

MVC

MVC 是 iOS 開發(fā)中使用最普遍的架構(gòu)模式,同時(shí)也是蘋果官方推薦的架構(gòu)模式。MVC 代表的是 Model–view–controller ,它們之間的關(guān)系如下:

是的,MVC 看上去棒極了,model 代表數(shù)據(jù),view 代表 UI ,而 controller 則負(fù)責(zé)協(xié)調(diào)它們兩者之間的關(guān)系。然而,盡管從技術(shù)上看 view 和 controller 是相互獨(dú)立的,但事實(shí)上它們幾乎總是結(jié)對出現(xiàn),一個(gè) view 只能與一個(gè) controller 進(jìn)行匹配,反之亦然。既然如此,那我們?yōu)楹尾粚⑺鼈兛醋饕粋€(gè)整體呢:

因此,M-VC 可能是對 iOS 中的 MVC 模式更為準(zhǔn)確的解讀。在一個(gè)典型的 MVC 應(yīng)用中,controller 由于承載了過多的邏輯,往往會(huì)變得臃腫不堪,所以 MVC 也經(jīng)常被人調(diào)侃成 Massive View Controller :

iOS architecture, where MVC stands for Massive View Controller.

坦白說,有一部分邏輯確實(shí)是屬于 controller 的,但是也有一部分邏輯是不應(yīng)該被放置在 controller 中的。比如,將 model 中的 NSDate 轉(zhuǎn)換成 view 可以展示的 NSString 等。在 MVVM 中,我們將這些邏輯統(tǒng)稱為展示邏輯。

MVVM

因此,一種可以很好地解決 Massive View Controller 問題的辦法就是將 controller 中的展示邏輯抽取出來,放置到一個(gè)專門的地方,而這個(gè)地方就是 viewModel 。其實(shí),我們只要在上圖中的 M-VC 之間放入 VM ,就可以得到 MVVM 模式的結(jié)構(gòu)圖:

從上圖中,我們可以非常清楚地看到 MVVM 中四個(gè)組件之間的關(guān)系。注:除了 view 、viewModel 和 model 之外,MVVM 中還有一個(gè)非常重要的隱含組件 binder :

view :由 MVC 中的 view 和 controller 組成,負(fù)責(zé) UI 的展示,綁定 viewModel 中的屬性,觸發(fā) viewModel 中的命令;

viewModel :從 MVC 的 controller 中抽取出來的展示邏輯,負(fù)責(zé)從 model 中獲取 view 所需的數(shù)據(jù),轉(zhuǎn)換成 view 可以展示的數(shù)據(jù),并暴露公開的屬性和命令供 view 進(jìn)行綁定;

model :與 MVC 中的 model 一致,包括數(shù)據(jù)模型、訪問數(shù)據(jù)庫的操作和網(wǎng)絡(luò)請求等;

binder :在 MVVM 中,聲明式的數(shù)據(jù)和命令綁定是一個(gè)隱含的約定,它可以讓開發(fā)者非常方便地實(shí)現(xiàn) view 和 viewModel 的同步,避免編寫大量繁雜的樣板化代碼。在微軟的 MVVM 實(shí)現(xiàn)中,使用的是一種被稱為XAML的標(biāo)記語言。

下面創(chuàng)建項(xiàng)目-簡單Demo展示MVVM



這就是ViewModel需要做的事情,做好網(wǎng)絡(luò)請求,獲取數(shù)據(jù),轉(zhuǎn)換為模型,然后我們在VC中調(diào)用,Model模型里面存儲(chǔ)的是name,icon,intro屬性,那么接下來我們來看控制器做了什么事情


這樣就完成了,筆者還不會(huì)markDown語法,寫的布局垃圾,請不要噴我,有不懂的,需要要demo的可以聯(lián)系1170758545@qq.com,謝謝!

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

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

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