每當(dāng)產(chǎn)品經(jīng)理不停的修改需求時及產(chǎn)品的功能越來越多時媳板。不得不考慮到產(chǎn)品的框架問題狈癞。
從步入開發(fā)的第一天起酸纲,“高內(nèi)聚低耦合”這個名詞一直纏繞在我們的腦袋中组哩。但是作為新手小咖怎么會理解到這個的重要性呢咖楣。所以實踐出真理督笆。好了,廢話不多說馬上進(jìn)入我們的主題诱贿。
首先我們先講講前幾年主推的MVC娃肿,在斯坦福大學(xué)的公開課上已經(jīng)很明確的交代了邏輯圖。
Controller : 為Model 及 View 的管理平臺
Model ? ? ? :存放著模型數(shù)據(jù)?
view ? ? ? ? ?:自定義view
1.view 發(fā)生觸發(fā)事件時告訴Controller?
2.Controller接收后去處理傳給Model去處理
3.Model處理成功后通知Controller 珠十,Controller去更新view
這樣的邏輯很清楚也很清晰料扰。但是功能越來越多的情況下。很多處理邏輯到交給了Controller焙蹭,(如UITableViewDataSoure,UITableViewDelegate....... )就在Controller中實現(xiàn)晒杈。時間久了。Controller就變得無比的臃腫孔厉。已經(jīng)違背了“高內(nèi)聚低耦合”這個名詞拯钻。
我們應(yīng)該把 “高內(nèi)聚低耦合”這個名詞改為動詞。
這個時候就多出了一個MVVM.
可以不難看出撰豺,其實在MVC中分離多一個viewModel粪般。viewModel主要的工作把Controller的一些工作交給viewModel去處理。ViewController只是管理器污桦,不應(yīng)該把大部分邏輯放入ViewController去處理亩歹,viewModel的加入大大提高了可讀性及邏輯性。
viewModel做的事情無非分為 :?
?1.獲取網(wǎng)絡(luò)請求
2.處理view的交互邏輯(如UITableViewDataSoure,UITableViewDelegate.......)
現(xiàn)實總是那么殘酷凡橱。
MVVM解決的方式就是把 處理view的交互邏輯 從Controller放入viewModel 其實說到底就是換湯不換藥小作。所以我針對MVVM模式,做了一個優(yōu)化
在一個控制器里有很多自定義view稼钩,他們的邏輯又是獨立的顾稀。只是通過交互方式來改變彼此的顯示方式及狀態(tài)。所有邏輯都放入各自的viewModel去處理变抽。當(dāng)需要去修改其他view的時候則可以通過回調(diào)(block,protocol)的方式去修改础拨。這時候就需要在Controller中去處理。
很多技術(shù)文 中都把 Controller 當(dāng)成view 绍载。其實那不是事實上的MVVM诡宗,那是MCVM (model, Controller , viewModel).
哈哈,這都是本人的理解击儡,如果本文中有什么錯誤的地方希望大家反饋塔沃。
本文禁止轉(zhuǎn)載
來自 處在水深火熱的iOS_林龍