該示例(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)論