目前Android開發(fā)比較流行的是MVP開發(fā)架構(gòu),與MVC不同的是把Activity、Fragment等作為View層,與Android平臺相關(guān)的東西基本上都被隔離在View層,Presenter負(fù)責(zé)處理業(yè)務(wù)邏輯和調(diào)度View和Model,Presenter的理想境界都是純Java的東西,數(shù)據(jù)加載、網(wǎng)絡(luò)請求看作是Model,還是原來的Model。
關(guān)于MVP網(wǎng)上的寫法很多,一直以為大家也比較關(guān)注,由于使用了MVP架構(gòu),接口會明顯變多,會有一種本來很簡單幾行的代碼的事,反而寫很多,那我們來看看GOOGLE是怎么做的吧。
項(xiàng)目地址:https://github.com/googlesamples/android-architecture
首先我們看到項(xiàng)目是以功能模塊劃分的,估計(jì)大多數(shù)同學(xué)喜歡文件類型來劃分吧,我還是比較喜歡用功能模塊來劃分,個(gè)人喜好問題。

眼神好的同學(xué)可能已經(jīng)看到了最下邊兩個(gè)接口了BasePresenter和BaseView
那就從他們?nèi)胧趾昧耍?br>
BaseView: 所有View的父接口,
public interface BaseView<T>
{
void setPresenter(T presenter);
}
BaseView中有一個(gè)泛型,其實(shí)就是Presenter了,是用于Presenter向View傳值,得到Presenter的引用,這樣在View中就可以調(diào)用Presenter的方法來實(shí)現(xiàn)一些功能了,比如向Presenter請求數(shù)據(jù),。
BasePresenter: BasePresnter是所有Presenter的父接口,只有一個(gè)start()方法,用于在onResume()中來看代碼:
public interface BasePresenter
{
void start();
}
在谷歌官方的MVP中還有一個(gè)比較有意思的就是Contract了,這個(gè)類似合同類的接口把P和V的所有方法全部寫在一起,看起來代碼格外清楚,所有的功能清清楚楚,其實(shí)只要看這個(gè)Contract差不多所有的功能就已經(jīng)有所了解了,如圖。

這里就不再過多的介紹細(xì)節(jié)問題,關(guān)鍵還是要看代碼,谷歌的代碼水平確實(shí)高,自己看了也收獲頗豐。
總結(jié):谷歌的mvp與其他的不同的是多了一個(gè)Contract,當(dāng)接口變多了,Contract優(yōu)勢明顯出來了,一目了然,相比寫一個(gè)個(gè)接口把他們都寫在一起這種做法還是不錯(cuò)的。