MVP學習

本文主要學習google開源代碼TODO-MVP 地址 https://github.com/googlesamples/android-architecture/tree/todo-mvp/

好了,開始我們的學習路程,看看大神的mvp模式是怎么寫的,汲取一寫經(jīng)驗。

在這里,mvp的概念我就不多說了。

圖1

圖1可以看出項目的每個界面的代碼結構是一樣的,我們只要分析其中一個即可。

我們看taskdetail這個包下面,activity顯示的只有fragment。我們只要看TaskDetailFragment,可以看出,fragment在這里就充當了mvp中的view這個部分。

我們在看fragment里面的具體實現(xiàn):


圖2

如圖2,我們看到fragment實現(xiàn)了接口TaskDetailContract中的View接口這里暫時不提實現(xiàn)的作用,先說明一下。


圖3

我們在聲明中看到還有一個對象mPresenter如圖3,同樣也是TaskDetailContract接口中的一個接口,有一些抽象方法,如圖4,mPresenter對象可以調(diào)用這些方法,


圖4

我們看一下實現(xiàn)這個接口的類TaskDetailPresenter,其實這里就充當了mvp中的P的角色,可以發(fā)現(xiàn)這里有TaskDetailPresenter()這個構造方法,通過查看代碼我們知道m(xù)TaskDetailView可以調(diào)用TaskDetailContract.View接口中的方法,然后回調(diào)到fragment中;調(diào)用mTaskDetailView.setPresenter (this)可以把TaskDetailPresenter對象傳到fragment中使用。

其實這就實現(xiàn)了一個回調(diào)的機制,這時候mTaskDetailView調(diào)用接口View中的方法時,我們就能通知fragment收到這個方法的操作。

我們發(fā)現(xiàn)TaskDetailPresenter中有個對象mTasksRepository,這是干嘛的呢,其實這個就是獲取數(shù)據(jù)的對象就是mvp中M部分,獲取數(shù)據(jù)的角色。


圖5

從圖5中可以看出getTask重寫了方法,在操作完數(shù)據(jù)時,會回調(diào)到 onTaskLoaded這個方法中,就mTaskDetailView調(diào)用方法來通知fragment刷新view部分。

好了以上就是個人的見解,本人還是菜鳥,還需要多學習。下面給一張自己的見解圖:


從分析我們知道,每一個界面都要寫一個MVP的這樣的代碼架構,這樣才能實現(xiàn)每一個界面業(yè)務邏輯的解耦,在頻繁修改需求的時候我們能夠即時修改,而且代碼不會那么亂,當然,我們可以寫個父類,把相同的邏輯層放進去,這樣將會更簡潔。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容