一直慕名Android的MVP模式没时间去研究,今天就好好记录一下我所理解的MVP模式。
看别人写的源码是最好的学习方法。
这次看的是谷歌的官方示例项目:https://github.com/googlesamples/android-architecture
整体的结构如下:
这个例子主要是做了一个tudo项目,把整体模块分成了四块:tudo主模块、tudo详情模块、统计模块、添加tudo模块。
项目首先定义了View和Presenter的基类作为所有模块通用的类,然后每个模块定义了一个契约类Contract来定义每个模块View和Presenter要处理的事务接口。
每个模块先由Activity创建继承自契约类Contract的View接口的fragment作为MVP的View处理UI业务,然后创建继承自契约类Contract的Presenter类把fragment传入,通过基类View的setPresenter方法将View和Presenter绑定在一起。UI初始化在fragment中实现,逻辑入口在Presenter的start方法中开始,fragment中的逻辑部分只需要调用相应的Presenter接口,Presenter中的UI操作也只需要调用相应的View接口,从而实现UI和逻辑代码的分离。
我想起我之前做的一个项目,也是有这种分离的想法,当时主要有两个模块,登录和支付,于是我创建了两个单例类、两个Activity和几十个fragment,以此来做到View和业务的分离以及View和View之间的分离。其实我当时如果有MVP的思维模式我应该创建2个Presenter,分别对应两个Activity的UI逻辑,创建2个Model分别对应登录和支付模块,多个View接口对应fragment。