一,概述
Android開發(fā)中买鸽,我們熟悉使用MVC的開發(fā)模式涧郊,如果在較大的項目中,經常會發(fā)現(xiàn)本該布局文件中的數(shù)據(jù)綁定的操作眼五,事件處理的代碼都在Activity中妆艘,造成了Activity既像View又像Controller,對于代碼的重用與理解或對于后來開發(fā)者會造成一些困擾看幼,最近看到了一個MVP開發(fā)模式的demo批旺,給人耳目一新的感覺,MVP結構模式的使用讓代碼的清晰度有了很大的提升诵姜,在這里總結了下自己的理解汽煮。
首先在這里我們可以對這兩種模式進行對比:
MVC開發(fā)模式:1.View:對應于布局文件;
2.Model:業(yè)務邏輯和實體模型;
3.Controllor:對應于Activity暇赤。
仔細想想這個View對應于布局文件心例,其實能做的事情特別少,基本上存在的意義不大翎卓,有名無實的感覺契邀。下面我們在看下MVP模式:
1.View 對應于Activity,負責View的繪制以及與用戶交互
2.Model 依然是業(yè)務邏輯和實體模型
3.Presenter 負責完成View于Model間的交互
二失暴,兩種模式的對比與區(qū)別
這里我們用一組模型圖對比下:
MVC模式圖
MVP模式圖
其實最明顯的區(qū)別就是坯门,MVC中是允許Model和View進行交互的,而MVP中很明顯逗扒,Model與View之間的交互由Presenter完成古戴。還有一點就是Presenter與View之間的交互是通過接口的,既降低耦合也方便進行單元測試矩肩。還有很多其他的優(yōu)點就不一一解釋了现恼,具體我們看下代碼。
三黍檩,項目中的體現(xiàn)
1.先看下項目結構
項目結構圖
2.效果圖如下
效果圖
如何去實現(xiàn)這種模式叉袍,關鍵在于我們要仔細分析界面與邏輯之間的聯(lián)系,在大腦中構建一個關聯(lián)輪廓刽酱,也就是一種思維導圖喳逛。簡單介紹下自己的使用
(1)首先我們需要一個UserBean,用來保存用戶信息
數(shù)據(jù)bean類
(2)再來看看View接口棵里,根據(jù)需求分析润文,View可以對ID、FirstName殿怜、LastName這三個EditText進行讀操作典蝌,對FirstName和LastName進行寫操作,由此來定義IUserView接口:
IUserView接口
(3)Model接口头谜,Model也需要對這三個字段進行讀寫操作骏掀,并存儲在某個載體內,根據(jù)需求來定義IUserModel接口:
Model接口
(4)Presenter就能通過接口與View及Model進行交互了:
Presenter交互
(5)UserActivity實現(xiàn)
圖1
圖2
可以看到,View只負責處理與用戶進行交互柱告,并把數(shù)據(jù)相關的邏輯操作都交給了Presenter去做截驮。而Presenter調用Model處理完數(shù)據(jù)之后,再通過IUserView更新View顯示的信息末荐。具體可參考github.com/VectorYi/MVPSample.git
以上僅是個人對于MVP架構模式的一點總結侧纯,還請多多指正。
參考文章:blog.csdn.net/lmj623565791/article/details/4659610
? ? ? ? ? ? ? ? ? ? github.com/zhengxiaopeng/Rocko-Android-Demos/tree/master/android-mvp
? ? ? ? ? ? ? ? ? ? zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/