基礎(chǔ):
RACCommand的詳細(xì)講解
MVVM架構(gòu)已經(jīng)耳熟能詳,網(wǎng)上有非常多的文章曙砂,講的都相當(dāng)不錯(cuò),MVVM最主要的關(guān)系我這里要提醒一下
最基本的規(guī)則:
1.View持有ViewModel 反之不持有
2.ViewModel持有Model 反之不持有
網(wǎng)上copy了一張關(guān)系圖
MVVM 的基本概念
在MVVM 中,view 和 view controller正式聯(lián)系在一起撩嚼,我們把它們視為一個(gè)組件
view 和 view controller 都不能直接引用model,而是引用視圖模型(viewModel)
viewModel 是一個(gè)放置用戶(hù)輸入驗(yàn)證邏輯衡便,視圖顯示邏輯麻裳,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他代碼的地方
使用MVVM會(huì)輕微的增加代碼量,但總體上減少了代碼的復(fù)雜性
MVVM 的注意事項(xiàng)
view 引用viewModel 涨椒,但反過(guò)來(lái)不行(即不要在viewModel中引入#import UIKit.h摊鸡,任何視圖本身的引用都不應(yīng)該放在viewModel中)(PS:基本要求,必須滿(mǎn)足)
viewModel 引用model蚕冬,但反過(guò)來(lái)不行
MVVM 的使用建議
MVVM 可以兼容你當(dāng)下使用的MVC架構(gòu)免猾。
MVVM 增加你的應(yīng)用的可測(cè)試性。
MVVM 配合一個(gè)綁定機(jī)制效果最好(PS:ReactiveCocoa你值得擁有)囤热。
viewController 盡量不涉及業(yè)務(wù)邏輯猎提,讓 viewModel 去做這些事情。
viewController 只是一個(gè)中間人旁蔼,接收 view 的事件忧侧、調(diào)用 viewModel 的方法、響應(yīng) viewModel 的變化牌芋。
viewModel 絕對(duì)不能包含視圖 view(UIKit.h)蚓炬,不然就跟 view 產(chǎn)生了耦合,不方便復(fù)用和測(cè)試躺屁。
viewModel之間可以有依賴(lài)肯夏。
viewModel避免過(guò)于臃腫,否則重蹈Controller的覆轍犀暑,變得難以維護(hù)驯击。
MVVM 的優(yōu)勢(shì)
低耦合:View 可以獨(dú)立于Model變化和修改,一個(gè) viewModel 可以綁定到不同的 View 上
可重用性:可以把一些視圖邏輯放在一個(gè) viewModel里面耐亏,讓很多 view 重用這段視圖邏輯
獨(dú)立開(kāi)發(fā):開(kāi)發(fā)人員可以專(zhuān)注于業(yè)務(wù)邏輯和數(shù)據(jù)的開(kāi)發(fā) viewModel徊都,設(shè)計(jì)人員可以專(zhuān)注于頁(yè)面設(shè)計(jì)
可測(cè)試:通常界面是比較難于測(cè)試的,而 MVVM 模式可以針對(duì) viewModel來(lái)進(jìn)行測(cè)試
MVVM 的弊端
數(shù)據(jù)綁定使得Bug 很難被調(diào)試广辰。你看到界面異常了暇矫,有可能是你 View 的代碼有 Bug,也可能是 Model 的代碼有問(wèn)題择吊。數(shù)據(jù)綁定使得一個(gè)位置的 Bug 被快速傳遞到別的位置李根,要定位原始出問(wèn)題的地方就變得不那么容易了。