本文主要學習google開源代碼TODO-MVP 地址 https://github.com/googlesamples/android-architecture/tree/todo-mvp/
好了,開始我們的學習路程,看看大神的mvp模式是怎么寫的,汲取一寫經驗。
在這里,mvp的概念我就不多說了。
圖1可以看出項目的每個界面的代碼結構是一樣的,我們只要分析其中一個即可。
我們看taskdetail這個包下面,activity顯示的只有fragment。我們只要看TaskDetailFragment,可以看出,fragment在這里就充當了mvp中的view這個部分。
我們在看fragment里面的具體實現:
如圖2,我們看到fragment實現了接口TaskDetailContract中的View接口這里暫時不提實現的作用,先說明一下。
我們在聲明中看到還有一個對象mPresenter如圖3,同樣也是TaskDetailContract接口中的一個接口,有一些抽象方法,如圖4,mPresenter對象可以調用這些方法,
我們看一下實現這個接口的類TaskDetailPresenter,其實這里就充當了mvp中的P的角色,可以發現這里有TaskDetailPresenter()這個構造方法,通過查看代碼我們知道mTaskDetailView可以調用TaskDetailContract.View接口中的方法,然后回調到fragment中;調用mTaskDetailView.setPresenter (this)可以把TaskDetailPresenter對象傳到fragment中使用。
其實這就實現了一個回調的機制,這時候mTaskDetailView調用接口View中的方法時,我們就能通知fragment收到這個方法的操作。
我們發現TaskDetailPresenter中有個對象mTasksRepository,這是干嘛的呢,其實這個就是獲取數據的對象就是mvp中M部分,獲取數據的角色。
從圖5中可以看出getTask重寫了方法,在操作完數據時,會回調到 onTaskLoaded這個方法中,就mTaskDetailView調用方法來通知fragment刷新view部分。
好了以上就是個人的見解,本人還是菜鳥,還需要多學習。下面給一張自己的見解圖:
從分析我們知道,每一個界面都要寫一個MVP的這樣的代碼架構,這樣才能實現每一個界面業務邏輯的解耦,在頻繁修改需求的時候我們能夠即時修改,而且代碼不會那么亂,當然,我們可以寫個父類,把相同的邏輯層放進去,這樣將會更簡潔。