MVVM去年在業(yè)界討論得非常多,無論國內(nèi)還是國外都討論得非常熱烈,尤其是在ReactiveCocoa這個庫成熟之后棍好,ViewModel和View的信號機(jī)制在iOS下終于有了一個相對優(yōu)雅的實現(xiàn)。MVVM本質(zhì)上也是從MVC中派生出來的思想,MVVM著重想要解決的問題是盡可能地減少Controller的任務(wù)前标。不管MVVM也好,MVCS也好距潘,他們的共識都是Controller會隨著軟件的成長炼列,變很大很難維護(hù)很難測試。只不過兩種架構(gòu)思路的前提不同音比,MVCS是認(rèn)為Controller做了一部分Model的事情俭尖,要把它拆出來變成Store,MVVM是認(rèn)為Controller做了太多數(shù)據(jù)加工的事情洞翩,所以MVVM把數(shù)據(jù)加工的任務(wù)從Controller中解放了出來稽犁,使得Controller只需要專注于數(shù)據(jù)調(diào)配的工作,ViewModel則去負(fù)責(zé)數(shù)據(jù)加工并通過通知機(jī)制讓View響應(yīng)ViewModel的改變骚亿。
MVVM是基于胖Model的架構(gòu)思路建立的已亥,然后在胖Model中拆出兩部分:Model和ViewModel。關(guān)于這個觀點我要做一個額外解釋:胖Model做的事情是先為Controller減負(fù)来屠,然后由于Model變胖虑椎,再在此基礎(chǔ)上拆出ViewModel,跟業(yè)界普遍認(rèn)知的MVVM本質(zhì)上是為Controller減負(fù)這個說法并不矛盾俱笛,因為胖Model做的事情也是為Controller減負(fù)捆姜。
另外,我前面說MVVM把數(shù)據(jù)加工的任務(wù)從Controller中解放出來迎膜,跟MVVM拆分的是胖Model也不矛盾泥技。要做到解放Controller,首先你得有個胖Model磕仅,然后再把這個胖Model拆成Model和ViewModel.
在iOS領(lǐng)域大部分MVVM架構(gòu)都會使用ReactiveCocoa零抬,但是使用ReactiveCocoa的iOS應(yīng)用就是基于MVVM架構(gòu)的嗎镊讼?那當(dāng)然不是,我覺得很多人都存在這個誤區(qū)平夜,我面試過的一些人提到了ReactiveCocoa也提到了MVVM蝶棋,但他們對此的理解膚淺得讓我忍俊不禁。
轉(zhuǎn)載至:https://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html