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