分析一下三種模式
很多人糾結(jié)于用以上哪個(gè)模式來開發(fā)會(huì)更好叫胖,其實(shí)我認(rèn)為結(jié)合起來使用最佳草冈。
軟件工程的思想強(qiáng)調(diào):高內(nèi)聚、低耦合,這幾個(gè)模式都是為了實(shí)現(xiàn)這個(gè)目標(biāo)而產(chǎn)生的怎棱。
mvc會(huì)導(dǎo)致model哩俭、view、controller耦合在一起拳恋,互相分不開凡资,適用于簡(jiǎn)單、不需要重用的界面谬运,將mvc三者耦合在一起讳苦,實(shí)際上就是高內(nèi)聚,不過主要業(yè)務(wù)還是在controller里實(shí)現(xiàn)吩谦,所以controller代碼量相對(duì)較大鸳谜。
mvp可以將model、view分離出去式廷,適用于重用頁面和model的場(chǎng)景咐扭,將controller作為presenter來使用model和view,view和model就得到了解放滑废,所有人都可以分享使用它們了蝗肪,然而代價(jià)也是存在的,controller把mvc寫在model和view里的代碼轉(zhuǎn)移到了自己這里蠕趁,代碼量變的非常龐大薛闪。
mvvm的話view和model綁定,非嘲陈科學(xué)的方式豁延,將界面變動(dòng)跟model數(shù)據(jù)改變綁定在一起,減輕了controller的負(fù)擔(dān)腊状。
我的做法
簡(jiǎn)單的頁面我依舊會(huì)使用mvc這種清晰并且簡(jiǎn)單的方式來開發(fā)诱咏。
有很多界面類似,數(shù)據(jù)結(jié)構(gòu)天差地別的界面缴挖,使用mvp會(huì)最好的情況袋狞,我會(huì)將view做成輪子,方便使用映屋。將model抽象化苟鸯,操作model的功能抽象成方法寫在model的類中。將controller中數(shù)據(jù)部分抽象分離一個(gè)DataSource類棚点。這都是為了減輕controller的負(fù)擔(dān)早处,也能減少mvc之間的耦合。
至于mvvm乙濒,其實(shí)適用于各種場(chǎng)景陕赃,不過比較依賴于第三方框架來實(shí)現(xiàn)卵蛉,iOS的系統(tǒng)自帶的KVO其實(shí)是一種實(shí)現(xiàn)方式,我也有用到么库,但是我更傾向于使用Notification傻丝,可以降低mv之間耦合,更加輕量诉儒,更加靈活葡缰。
總結(jié)
一個(gè)項(xiàng)目,是龐大的忱反,設(shè)計(jì)模式是為了開發(fā)而設(shè)計(jì)出來的泛释,沒有必要一個(gè)工程只用一個(gè)模式,視情況而定温算,低耦合是核心怜校。