該示例(TODO-MVP)是后續(xù)各種示例演變的基礎(chǔ),它主要演示了在不帶架構(gòu)性框架的情況下實現(xiàn)M-V-P模式。其采用手動依賴注入的方式來提供本地數(shù)據(jù)源和遠程數(shù)據(jù)源倉庫。異步任務(wù)通過回調(diào)處理。
注意:MVP中View的概念是有所不同的:
- android.view.View類我們叫它 "Android View"
- MVP中從P接收命令的東西我們叫它”View”,后文說了,就是Fragment
Fragment
采用Fragment作為視圖的載體有兩個原因:
- Activity 和 Fragment分離恰好適合用來實現(xiàn)MVP:Activity是創(chuàng)建和連接View與Presenter的總控制器
- 適配平板設(shè)備的布局或多視圖屏幕的場景都可利用Fragment框架的優(yōu)勢
關(guān)鍵概念
該App(指官方TODO-MVP示例)中有四個功能:
- Tasks
- TaskDetail
- AddEditTask
- Statistics
每個功能擁有下列代碼分工:
- 定義VIew和Presenter之間的“契約”接口
- 一個Activity類負責創(chuàng)建Fragment和Presenter
- 一個Fragment類實現(xiàn)VIew接口
-
一個Presenter類實現(xiàn)Presenter接口
一般來說,業(yè)務(wù)邏輯存在于Presenter中并依賴View完成Android中UI相關(guān)的工作。
View中幾乎不包含邏輯:它將Presenter的命令轉(zhuǎn)換為UI動作,并監(jiān)聽用戶動作傳遞給Presenter。
“契約”接口用于定義View和Presenter之間的聯(lián)系。
(譯注:
有人立馬就問到M哪去了,官方實例里M是輕的,與Repository和DataSource概念分離。
網(wǎng)友評論