前段時間項目上有點忙,已經(jīng)停止更新很久了,最近有空,想把自己之前再項目中用的一些,或者學習的一些知識總結(jié)一下,哈哈,又快到年底啦??梢宰鲎鰷蕚渑?。
首先要明確了解MVP、MVC、MVVM 都是軟件的架構(gòu),然后我們再來分別了解下他們之間的優(yōu)缺點和聯(lián)系
MVC
mvc的意思是,軟件可以分為三個部分
mvc(model-view-controller)
- modle(數(shù)據(jù)模型):數(shù)據(jù)的存儲對象
- view(試圖): 用戶的界面(也就是我們所說的activity界面)
- controller(控制器):業(yè)務邏輯層
各個模塊之間的聯(lián)系如下圖

mvc.png
- view:用戶在界面操作之后,傳達指令給controller控制層
- controller: 接收指令之后,進行相應的業(yè)務邏輯之后,得到數(shù)據(jù),傳遞給model
- model: 在得到新的數(shù)據(jù)之后,通知view界面更新狀態(tài)
MVC優(yōu)缺點:
優(yōu)點:
講業(yè)務邏輯層都抽到controller層,模塊化程度高
缺點:
view-model-controller之間的聯(lián)系緊密,耦合性低,不利于測試和修改
MVP
mvp和mvc類似,只是將controller改為present
(model-view-present)
- model(數(shù)據(jù)模型):數(shù)據(jù)的存儲
- view(試圖):用戶的界面(也就是我們所說的activity界面)
- present:主要負責view和model之間的交互
各個模塊之間的聯(lián)系如下圖:

mvp.png
中間實現(xiàn)的原理個人理解就是:
- activity界面實現(xiàn)一個viewInterface
- present對象中注入viewinterface實例
在present中可以做任何復雜的業(yè)務邏輯操作
處理結(jié)束之后,可以通過viewinterface,直接更改activity界面的更改
哈哈,是不是很簡單。
mvp優(yōu)點:
model層不再直接更新view層,降低了耦合性,更利于測試
MVVM
mvvm模式將mvp中present改為viewModel,基本和mvp一致
關(guān)系圖如下:

mvvm.png
關(guān)于什么是MVVM可以參考下這這篇文章
還有一個本人之前寫的databinding這篇文章