Android MVP框架详解

来源:互联网 发布:公积金管理系统uc矩阵 编辑:程序博客网 时间:2024/05/21 09:18

1、MVC与MVP

MVC:
View:对应于布局文件
Modle:业务逻辑和实体模型
Controller:控制器,对应activity
这个view能做的事情特别少,实际上布局文件的数据绑定操作、事件处理的代码都是在activity中,造成了activity像view也像controller。

对于经典的 Android MVC 框架来说,如果只是简单的应用,业务逻辑写到 Activity 下面并无太多问题,但一旦业务逐渐变得复杂起来,每个页面之间有不同的数据交互和业务交流时,activity 的代码就会急剧膨胀,代码就会变得可读性,维护性很差。

而当将架构改为MVP以后,Presenter的出现,将Actvity视为View层,Presenter负责完成View层与Model层的交互。现在是这样的:
View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互

MVC与MVP的区别如图所示:
这里写图片描述

MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的。

为什么要使用MVP?
在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。当我们将其中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity其实就是MVP模式中View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由Presenter处理).

MVP优点:
(1)每层各自独立,通过接口通信
(2)实现与接口分离,不同场景(正式,测试)可以挂载不同的实现,方便测试和开发写假数据
(3)所有的业务逻辑都在非UI线程中进行,最大限度减少IO操作对UI的影响

MVP模式的应用

通过代码模拟登录的实现过程。
model层描述和具体代码:展示在view层的数据和具体登陆业务逻辑处理的实现
LoginModel(登录接口):
这里写图片描述

LoginModelImpl(登录接口实现类,具体的业务逻辑):
这里写图片描述

OnLoginFinishListener(业务处理完成后回调接口):
这里写图片描述

LoginPresenter(登录数据验证接口,连接view与model):
这里写图片描述

LoginPresenterImpl(实现类,登录数据验证逻辑实现):
这里写图片描述

最重要的一个类,功能:
1、完成presenter的实现。这里面主要是Model层和View层的交互和操作。(拥有View层与Model层的实例)
2、presenter里面还有个OnLoginFinishedListener,其在Presenter层实现,给Model层回调,更改View层的状态, 确保 Model层不直接操作View层。

LoginView(操作view的一些接口,其实现是在LoginActivity):
这里写图片描述

LoginActivity:
这里写图片描述
这里写图片描述

layout文件:
这里写图片描述

到处结束,参考文章:http://www.jianshu.com/p/9d40b298eca9(简书)

0 0