Android框架式编程之MVP架构
MVP是Google官方發(fā)布的Android開發(fā)相關(guān)的架構(gòu)知識(shí)。本文要講解的是一種最基本的MVP的實(shí)現(xiàn)方式,它使用手動(dòng)的依賴注入來提供具有本地和遠(yuǎn)程數(shù)據(jù)源的存儲(chǔ)庫。異步任務(wù)處理回調(diào)。
基本的MVP示例項(xiàng)目地址:https://github.com/googlesamples/android-architecture/tree/todo-mvp/。
下圖是基本的MVP的邏輯圖:
注意:在MVP的模式中,View是被重新定義的。
- android.view.View類被指為Android View。
- 在MVP中,接受presenter命令的View將被簡稱為View。
MVP(Model-View-Presenter)模式,將APP的結(jié)構(gòu)分為三層:View -?Presenter - Model。
View
1. 提供UI交互
2. 在presenter的控制下修改UI。
3. 將業(yè)務(wù)事件交由presenter處理。
注意:View層不存儲(chǔ)數(shù)據(jù),不與Model層交互。
Presenter
1. 對(duì)UI的各種業(yè)務(wù)事件進(jìn)行相應(yīng)處理。也許是與Model層交互,也許自己進(jìn)行一些計(jì)算,也許控制后臺(tái)Task,Servic
2. 對(duì)各種訂閱事件進(jìn)行響應(yīng),修改UI。
3. 臨時(shí)存儲(chǔ)頁面相關(guān)數(shù)據(jù)。
注意 : Presenter內(nèi)不出現(xiàn)View引用。
Model
1. 從網(wǎng)絡(luò),數(shù)據(jù)庫,文件,傳感器,第三方等數(shù)據(jù)源讀寫數(shù)據(jù)。
2. 對(duì)外部的數(shù)據(jù)類型進(jìn)行解析轉(zhuǎn)換為APP內(nèi)部數(shù)據(jù)交由上層處理。
3. 對(duì)數(shù)據(jù)的臨時(shí)存儲(chǔ),管理,協(xié)調(diào)上層數(shù)據(jù)請(qǐng)求。
下圖是MVP各層的結(jié)構(gòu)示意圖:
MVP架構(gòu)能夠?qū)?fù)雜的功能分割為各層內(nèi)的小問題。各層內(nèi)功能單一。這樣易于功能修改拓展與Debug。解耦的設(shè)計(jì),獨(dú)立的模塊,更有利于分工開發(fā)與測(cè)試。?
在示例Demo中,我們可以看到使用到了Fragments,這里使用Fragment有兩個(gè)原因:
Fragment和 activity的分離符合實(shí)現(xiàn)MVP的思路。Activity是整體的控制器,能夠創(chuàng)建和連接view和presenter。
平板形式的布局方式也能夠很好的使用到Fragment。
關(guān)鍵概念
在這個(gè)sample app里面,有四個(gè)功能:
- Task
- TaskDetail
- AddEditTask
- Statistics?
每一個(gè)功能都有:
- 定義了View和Presenter的聯(lián)系
- 一個(gè)Activity,負(fù)責(zé)創(chuàng)建Fragment和Presenter。
- 一個(gè)Fragment來實(shí)現(xiàn)View的接口
- 一個(gè)Presenter實(shí)現(xiàn)了Presenter的接口
一般來說,業(yè)務(wù)邏輯應(yīng)該在Presenter里面存在,依賴View來完成Android的UI操作。而View不應(yīng)該有任何的業(yè)務(wù)邏輯存在,它只負(fù)責(zé)將Presenter的命令轉(zhuǎn)換成UI操作,并將用戶的行為傳遞給Presenter。Contract是定義View和Presenter之間聯(lián)系的一系列接口。
Dependencies(依賴)
- Common Android support libraries (com.android.support.*)
- Android Testing Support Library (Espresso, AndroidJUnitRunner…)
- Mockito
- Google Guava (非空檢查庫)
Features(特性)
MVP 復(fù)雜性的理解:
- 架構(gòu)的框架/庫/工具的使用復(fù)雜性:None — 不復(fù)雜
- 概念的復(fù)雜性:低,這個(gè)是一個(gè)Android純MVP
- 可測(cè)試性: 單元測(cè)試 -- 高, Presenter 和 數(shù)據(jù)源都可以進(jìn)行單元測(cè)試; UI測(cè)試 -- 高,允許使用假數(shù)據(jù)進(jìn)行注入測(cè)試。
- 代碼度量:相比較傳統(tǒng)的項(xiàng)目,MVP架構(gòu)會(huì)定義更多的類和接口。所以MVP的代碼行數(shù)和類的數(shù)量都會(huì)比較高。
- 可維護(hù)性:高 -- 易于修改和添加一個(gè)功能
- 學(xué)習(xí)成本:低 -- 功能易于發(fā)現(xiàn),責(zé)任明確。開發(fā)人員不需要熟悉任何依賴于項(xiàng)目外部的的project。
?
轉(zhuǎn)載于:https://www.cnblogs.com/renhui/p/6277398.html
總結(jié)
以上是生活随笔為你收集整理的Android框架式编程之MVP架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android与服务器通信之socket
- 下一篇: HenCoder Android 开发进