android的mvp架构

顾名思义mvp是model-view-present的简称,这一套框架主要是为了解决随着应用功能的增加,view层的代码会变的越来越繁琐,而且view层若是直接来操作数据,那么对于单元测试,出现bug进行调整都是很困难的,为了解决这些方面的问题,mvp的设计模式就产生了。

1.MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理。

iOS MVP架构原理 mvp架构模式_android


mvp设计模式是很好了解的,关键在于代码实现,我在网上查看了不少源码实现,包括也看了谷歌官方提供的mvp设计例子,大体来说,本人看到的实现mvp的模式,网上基本采取两种模式,一种是基于dagger2+retrofit+rxjava的模式,这种模式在于应用dagger2依赖注入的方法,使得activity与present,present与model,这之间的耦合,解耦方便快捷。dagger2的用法,目前暂时先不介绍了,篇幅很大,而且功能很多。。。然后retrofit与rxjava,retrofit主要是网络通信使用,一般应用于model层,rxjava属于事件观察与订阅,两者一起使用可以大大缩减网络请求层的代码结构,具体实现也先不介绍,篇幅很大。

mvp的另外一种实现方式,使用的是泛型+反射的形式将各个层级耦合起来,这种方式实现起来比较简单,而且不同于dagger2的复杂,这种方式实现简单,但是缺点也是很明显的,反射是动态执行的,效率就会很低下,而且因为涉及到强转,可能会引发更多的异常,此种方式适合代码轻量级的mvp设计,若是类很多,还是推荐dagger2的依赖注入模式。

这里,由于mvp需要大量的接口回掉,谷歌官方实现方法是将view层与present层的接口写在一个类里面,方便修改:

iOS MVP架构原理 mvp架构模式_iOS MVP架构原理_02

而在数据model层,需要跟present进行交互处理,也是使用接口来回调,下面是model层的接口:

iOS MVP架构原理 mvp架构模式_mvp_03


而对于接口的实现,都是通过dagger2在present层进行注入的

iOS MVP架构原理 mvp架构模式_bug_04


iOS MVP架构原理 mvp架构模式_android_05


iOS MVP架构原理 mvp架构模式_mvc_06


具体,这里面的依赖注入功能可能需要dagger2的相关知识,当前篇幅,就暂时不讲解了。

以上,差不多就是mvp的一种代码架构了。