本文主要學(xué)習(xí)google開源代碼TODO-MVP 地址 https://github.com/googlesamples/android-architecture/tree/todo-mvp/
好了,開始我們的學(xué)習(xí)路程仿耽,看看大神的mvp模式是怎么寫的结窘,汲取一寫經(jīng)驗(yàn)。
在這里失乾,mvp的概念我就不多說了。
圖1可以看出項(xiàng)目的每個(gè)界面的代碼結(jié)構(gòu)是一樣的纬乍,我們只要分析其中一個(gè)即可碱茁。
我們看taskdetail這個(gè)包下面,activity顯示的只有fragment仿贬。我們只要看TaskDetailFragment纽竣,可以看出,fragment在這里就充當(dāng)了mvp中的view這個(gè)部分茧泪。
我們在看fragment里面的具體實(shí)現(xiàn):
如圖2蜓氨,我們看到fragment實(shí)現(xiàn)了接口TaskDetailContract中的View接口這里暫時(shí)不提實(shí)現(xiàn)的作用,先說明一下队伟。
我們在聲明中看到還有一個(gè)對象mPresenter如圖3穴吹,同樣也是TaskDetailContract接口中的一個(gè)接口,有一些抽象方法嗜侮,如圖4刀荒,mPresenter對象可以調(diào)用這些方法代嗤,
我們看一下實(shí)現(xiàn)這個(gè)接口的類TaskDetailPresenter,其實(shí)這里就充當(dāng)了mvp中的P的角色缠借,可以發(fā)現(xiàn)這里有TaskDetailPresenter()這個(gè)構(gòu)造方法干毅,通過查看代碼我們知道m(xù)TaskDetailView可以調(diào)用TaskDetailContract.View接口中的方法,然后回調(diào)到fragment中泼返;調(diào)用mTaskDetailView.setPresenter (this)可以把TaskDetailPresenter對象傳到fragment中使用硝逢。
其實(shí)這就實(shí)現(xiàn)了一個(gè)回調(diào)的機(jī)制,這時(shí)候mTaskDetailView調(diào)用接口View中的方法時(shí)绅喉,我們就能通知fragment收到這個(gè)方法的操作渠鸽。
我們發(fā)現(xiàn)TaskDetailPresenter中有個(gè)對象mTasksRepository,這是干嘛的呢柴罐,其實(shí)這個(gè)就是獲取數(shù)據(jù)的對象就是mvp中M部分徽缚,獲取數(shù)據(jù)的角色。
從圖5中可以看出getTask重寫了方法革屠,在操作完數(shù)據(jù)時(shí)凿试,會回調(diào)到 onTaskLoaded這個(gè)方法中,就mTaskDetailView調(diào)用方法來通知fragment刷新view部分似芝。
好了以上就是個(gè)人的見解那婉,本人還是菜鳥,還需要多學(xué)習(xí)党瓮。下面給一張自己的見解圖:
從分析我們知道详炬,每一個(gè)界面都要寫一個(gè)MVP的這樣的代碼架構(gòu),這樣才能實(shí)現(xiàn)每一個(gè)界面業(yè)務(wù)邏輯的解耦寞奸,在頻繁修改需求的時(shí)候我們能夠即時(shí)修改呛谜,而且代碼不會那么亂,當(dāng)然枪萄,我們可以寫個(gè)父類隐岛,把相同的邏輯層放進(jìn)去,這樣將會更簡潔呻引。