文章目錄:
一、整潔的代碼(劃分ViewController中的代碼)
二、ViewController容器(使用ChildVC)
一、整潔的代碼
1.使用MVC模式減輕VC中的代碼.
各種各樣的任務(wù)穿梭于 models,controllers 和 views 之間。為了避免讓 view controllers 做所有的事,我們將盡可能地把這些任務(wù)劃分到合適的地方,這樣有利于閱讀、維護(hù)和測(cè)試。
2.更加整潔的MVVM模式.
Model:業(yè)務(wù)數(shù)據(jù)模型
View:展示數(shù)據(jù),與用戶交互
ViewModel: 通過持有的model實(shí)現(xiàn)其對(duì)應(yīng)的view的業(yè)務(wù)邏輯,通過一些屬性控制其對(duì)應(yīng)的view的一些狀態(tài).
實(shí)現(xiàn)流程: view-->事件-->請(qǐng)求處理-->調(diào)整view
view:與用戶交互
事件:view接收的用戶事件(點(diǎn)擊等) 或者系統(tǒng)事件(viewWillAppear)
請(qǐng)求處理:viewModel請(qǐng)求接口獲取數(shù)據(jù)(model),通過持有model數(shù)據(jù)處理相應(yīng)業(yè)務(wù)邏輯并保存處理結(jié)果的相應(yīng)狀態(tài)數(shù)據(jù)
調(diào)整view:view從viewModel中獲取相應(yīng)狀態(tài)數(shù)據(jù)及model中所需的數(shù)據(jù)調(diào)整自身展示
3.讓view可復(fù)用
有時(shí)多種 model 對(duì)象需要用同一類型的 view 來表示,這種情況下,我們可以進(jìn)一步讓 view 可以復(fù)用。首先,我們給 view 定義一個(gè) protocol,需要用這個(gè) view 顯示的對(duì)象必須遵循這個(gè) protocol。然后簡(jiǎn)單修改 view的設(shè)置方法,讓它可以接受遵循這個(gè) protocol 的任何對(duì)象。這些簡(jiǎn)單的步驟讓 view 和任何特殊的 model 對(duì)象之間得以解耦,讓它可適應(yīng)不同的數(shù)據(jù)類型。
protocol的兩種場(chǎng)景:
1.A持有B,A需要為B提供服務(wù),則A設(shè)為B的代理,A必須實(shí)現(xiàn)protocol中必須的服務(wù)
2.A持有B,B需要為A提供服務(wù),則B必須實(shí)現(xiàn)A所需的protocol服務(wù)
二、View Controller容器
1.須在 child view controller 和 parent view controller 之間建立消息傳遞的渠道。
參考抽屜的實(shí)現(xiàn)源碼理解
2.parent view controller 應(yīng)該只關(guān)心兩個(gè)任務(wù):布局 child view controller 的 root view,以及與 child view controller 暴露出來的 API 通信。它絕不應(yīng)該去直接修改 child view tree 或其他內(nèi)部狀態(tài)。