MVC和MVP,MVVM之間的關(guān)系
MVC和MVP的關(guān)系
我們都知道MVP是從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數(shù) 據(jù),View負責顯示。作為一種新的模式,MVP與MVC有著一個重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過 Presenter (MVC中的Controller)來進行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會直接從Model中讀取數(shù)據(jù)而不是通過 Controller。
MVVM和MVP的關(guān)系
而 MVVM 模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。 唯一的區(qū)別是,它采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。這樣開發(fā)者就不用處理接收事件和View更新的工作,框架已經(jīng)幫你做好了。
視圖化解釋關(guān)系
MVC架構(gòu):
- View:對應于布局文件
- Model:業(yè)務(wù)邏輯和實體模型
- Controllor:對應于Activity
View可以與Model直接交互。
Controller是基于行為的,并且可以被多個View共享。
可以負責決定顯示哪個View。
MVP架構(gòu):
- View: 對應于Activity,負責View的繪制以及與用戶交互
- Model: 依然是業(yè)務(wù)邏輯和實體模型
- Presenter: 負責完成View于Model間的交互
View不直接與Model交互,而是通過與Presenter交互來與Model間接交互。
Presenter與View的交互是通過接口來進行的。
通常View與Presenter是一對一的,但復雜的View可能綁定多個Presenter來處理邏輯。
MVVM架構(gòu):
- Model:代表你的基本業(yè)務(wù)邏輯
- View:顯示內(nèi)容
- ViewModel:將前面兩者聯(lián)系在一起的對象
一個ViewModel接口提供了兩個東西:動作和數(shù)據(jù)。動作改變Model的下層(click listener,監(jiān)聽文字改變的listener等等),而數(shù)據(jù)則是Model的內(nèi)容。
在MVVM中,ViewModel在改變內(nèi)容之后通知binding framework內(nèi)容發(fā)生了改變。然后framework自動更新和那些內(nèi)容綁定的view。這兩個組件只是通過ViewModel松耦合在一起。這種設(shè)計模式之所以好用和方便,除了明顯智能化了的View之外,還方便了測試。因為ViewModel不在依賴于View了,你可以在沒有View的情況下也能測試ViewModel。在合適的依賴注入的幫助下,測試就會變得非常簡單。
MVVM的優(yōu)點
- 低耦合 。 視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
- 可重用性 。 你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
- 獨立開發(fā) 。 開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設(shè)計人員可以專注于頁面設(shè)計。
- 可測試 。 界面素來是比較難于測試的,而現(xiàn)在測試可以針對ViewModel來寫。