Android之MVP架构

Google在3月份推出了Android MVP架构的各种组合,据说学习价值极高。我们不得不持续学习,以下是一些笔记。

官方MVP项目的Github地址是:
https://github.com/googlesamples/android-architecture

一,Google MVP 项目有哪些?

1,目前已经完成的开源项目:

todo-mvp(mvp基础架构示例)
todo-mvp-loaders(基于mvp基础架构项目,获取数据部分使用了Loaders架构)
todo-mvp-databinding(基于mvp基础架构项目,使用了数据绑定组件)

2,仍在进展中的开源项目:

todo-mvp-contentproviders(基于mvp基础架构项目,使用了Content Providers)
todo-mvp-clean(基于mvp基础架构项目,使用了clean架构的概念)
todo-mvp-dagger(基于mvp基础架构项目,使用了dagger2进行依赖注入)

二,官方todo-MVP项目的实现方式

官方示例实现mvp的总体的轮廓,关于项目中业务代码我们仅列出了任务详情页(taskDetail)的相关类,其他业务代码类似.
1,mvp实现了三层架构
mvp实现了三层架构
2.相关类图。
业务逻辑

三,测试相关组件

1,示例项目的测试方面。

对视图逻辑(view层)和业务逻辑(presenter层)进行了拆分,可以对UI、业务代码分别进行测试。

P层:不需要任何Android环境,因此使用Junit测试即可
V层:使用Google强大的Espresso进行UI的测试
M层:涉及到数据库相关操作,因此需要依赖Android环境,使用AndroidJUnitRunner进行测试

2,关于单元测试,需要预先了解以下内容:

junit:对业务层进行单元测试。
Android Studio的test和AndroidTest:官方测试框架
AndroidJUnitRunner:一个兼容Junit4的Andriod单元测试框架。
Mockito:生成测试mock对象,单元测试利器。
Espresso:进行UI测试。
dexmaker:支撑mockito。
hamcrest:可读性更高,更加灵活,测试代码的匹配更接近自然语言。

四,todo项目结构

1,view层:负责UI展示,包含了三个模块:待办事项列表模块,待办事项详情模块,统计模块。

添加的todo
new todo

2,presenter层:调用presenter代码来处理业务逻辑

Presenter

3,model层:存取数据。和presenter交互,脱离view

model data层
MVP模式下,View层做的事情都能做了,如UI布局,数据渲染,点击按钮交互等。
activity在项目中是一个全局的控制者,负责创建view以及presenter实例,并将二者联系起来。
需要界面做对应的变化,presenter直接调用view层的方法即可。
实例中,数据的获取、存储、数据状态变化都是model层的任务,presenter会根据需要调用该层的数据处理逻辑并在需要时将回调传入。这样model、presenter、view都只处理各自的任务。

五,总结

实际的项目中应用了,有些时候想用MVP的,官方的demo的确提供了一个很好的参考。MVC,MVP和MVVM都需要了解。
UI代码与业务代码分离,不再像之前的activity那么臃肿。如此,UI层和业务层可以分别进行单元测试;虽然代码量可能增加,但各个类职责都非常明确,各司其职,后期的扩展,维护都会更加容易。
杜乾,Dusan,291902259,欢迎交流。