更輕量的ViewControllers

文章目錄:

一、整潔的代碼(劃分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)。

最后編輯于
?著作權(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)容