目前Android开发比较流行的是MVP开发架构,与MVC不同的是把Activity、Fragment等作为View层,与Android平台相关的东西基本上都被隔离在View层,Presenter负责处理业务逻辑和调度View和Model,Presenter的理想境界都是纯Java的东西,数据加载、网络请求看作是Model,还是原来的Model。
关于MVP网上的写法很多,一直以为大家也比较关注,由于使用了MVP架构,接口会明显变多,会有一种本来很简单几行的代码的事,反而写很多,那我们来看看GOOGLE是怎么做的吧。
项目地址:https://github.com/googlesamples/android-architecture
首先我们看到项目是以功能模块划分的,估计大多数同学喜欢文件类型来划分吧,我还是比较喜欢用功能模块来划分,个人喜好问题。
眼神好的同学可能已经看到了最下边两个接口了BasePresenter和BaseView
那就从他们入手好了:
BaseView: 所有View的父接口,
public interface BaseView<T>
{
void setPresenter(T presenter);
}
BaseView中有一个泛型,其实就是Presenter了,是用于Presenter向View传值,得到Presenter的引用,这样在View中就可以调用Presenter的方法来实现一些功能了,比如向Presenter请求数据,。
BasePresenter: BasePresnter是所有Presenter的父接口,只有一个start()方法,用于在onResume()中来看代码:
public interface BasePresenter
{
void start();
}
在谷歌官方的MVP中还有一个比较有意思的就是Contract了,这个类似合同类的接口把P和V的所有方法全部写在一起,看起来代码格外清楚,所有的功能清清楚楚,其实只要看这个Contract差不多所有的功能就已经有所了解了,如图。
这里就不再过多的介绍细节问题,关键还是要看代码,谷歌的代码水平确实高,自己看了也收获颇丰。
总结:谷歌的mvp与其他的不同的是多了一个Contract,当接口变多了,Contract优势明显出来了,一目了然,相比写一个个接口把他们都写在一起这种做法还是不错的。