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