1、MVC的特點
(1) 用戶可以向view發(fā)送指令注整,再由view直接要求model改變狀態(tài)
(2) 用戶也可以直接向controller發(fā)送指令能曾,再由controller發(fā)送給view
(3) controller起到事件路由的作用,同時業(yè)務(wù)邏輯全部部署在controller
? 可以看出mvc的耦合性還是相對較高肿轨,view可以直接訪問model寿冕,導(dǎo)致3者 之間構(gòu)成回路,因此椒袍,mvp和mvc的主要區(qū)別是驼唱,mvp中的view不能直接訪問model需要通過presenter發(fā)出請求,view和model不能直接通信
2驹暑,MVVM特點
mvvm與mvp非常相似玫恳,唯一的區(qū)別是view和model進行雙向綁定,(data-bingding)岗钩,兩者之間有一方發(fā)生變化則反應(yīng)到另一方上纽窟,而mvp與mvvm的主要區(qū)別是,mvp中的view更新需要通過presenter兼吓,而mvvm則不需要臂港,因為view和model進行了雙向綁定,數(shù)據(jù)的修改回直接反映到view角色上视搏,而view的修改也會導(dǎo)致數(shù)據(jù)的變更审孽,此時,viewmodel的角色需要做的只是業(yè)務(wù)邏輯的處理浑娜,以及修改view或者model的狀態(tài)佑力,mvvm的模式有點像listview和adapter,數(shù)據(jù)集的關(guān)系筋遭,這個adapter就是viewmodel的角色打颤,她與view進行了綁定,又與數(shù)據(jù)集進行了綁定漓滔,當數(shù)據(jù)集發(fā)生變化時编饺,調(diào)用adapter的notifydatasetchanged之后view直接更新,他們之間沒有直接的耦合(這里吐槽一下响驴,很多逗比認為這個模式是mvc)
3透且、MVC、MVP豁鲤、MVVM的區(qū)別
MVC:如下圖秽誊,用戶操作從View操作鲸沮,然后Controller更新Model,更新完后通知Controller锅论,再由Controller更新到用戶界面讼溺。缺點很明顯,三角關(guān)系是相互依存的棍厌,如果需求變化時肾胯,需要改變?nèi)齻€對象,三個交互耘纱,無疑會使事情復(fù)雜化敬肚。
MVP:如下圖。改進MVC的思想是束析,切斷的View和Model的聯(lián)系艳馒,讓View只和Presenter(原Controller)交互,減少在需求變化中需要維護的對象的數(shù)量员寇。假如原來要實現(xiàn)登錄弄慰,現(xiàn)在要實現(xiàn)注冊,登錄和注冊的結(jié)果都是成功或者失敗蝶锋,MVC的邏輯全是在Controller里面實現(xiàn)陆爽,需求改變后,Controller一定要修改扳缕,Model一定要修改慌闭;換成MVP模式,則只用修改Model部分躯舔。
MVC與MVP的主要區(qū)別在于驴剔,MVC中Controller不僅要實現(xiàn)加View與Model的交互,還要實現(xiàn)全部業(yè)務(wù)邏輯粥庄;而MVP把Controller的事件邏輯處理丧失,分離到View和Model部分,只關(guān)注兩者的交互惜互。明顯MVP更利于需求變化修改布讹。
MVVM:如下圖。MVVM關(guān)鍵在于Data Binding训堆,數(shù)據(jù)綁定炒事,View和ViewModel由Data Binding綁定,View 接口的 showData蔫慧、showLoading這些實現(xiàn)方法可以不寫了,通過 Binding 來實現(xiàn)权薯。MVVM理解起來還是復(fù)雜姑躲,不過今后馬上就可以用Data Binding實現(xiàn)Android開發(fā)睡扬。