本文主要学习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的这样的代码架构,这样才能实现每一个界面业务逻辑的解耦,在频繁修改需求的时候我们能够即时修改,而且代码不会那么乱,当然,我们可以写个父类,把相同的逻辑层放进去,这样将会更简洁。
网友评论