一、MVC与MVP简单介绍

1.MVC,模型-视图-控制器

model:业务逻辑和实体模型

view:对应的布局文件

controller:对应的Activity

VIew对应的布局文件,能做的事很少,关于布局文件中的数据绑定的操作,事件的处理等代码都在Activity中,使得Activity中的代码很多

2.MVP,模型-视图-层现器

model:业务逻辑和实体模型

view:对应的是Activity,负责view的绘制以及用户的交互

presenter:负责view和model的交互

减少了Activity的职责,简化了Activity中的代码,将复杂的逻辑代码交给了presenter中进行处理,模块职责划分清晰,方便进行测试

presenter与view之间的交互是通过接口

二、MVP的简单使用(登录为例)

1.Model层(负责从登录界面获取账号密码请求服务器进行验证)

(1)实体类LoginBean

(2)接口,用于model层所执行的业务逻辑LoginModel

(3)接口实现类,具体实现业务逻辑,包括主要的方法LoginModelImp

android viewModel 初始化传参 android模型_业务逻辑

android viewModel 初始化传参 android模型_mvp_02

2.View层(将Model层请求的数据呈现给用户,包括界面ui,不包括界面逻辑,界面的逻辑由presenter来实现)

(1)接口,presenter与view交互是通过接口,接口中定义的方法是根据Activity用户交互需要的控件来确定的

(2)接口实现类,将定义的方法在Activity中对应实现具体操作

android viewModel 初始化传参 android模型_布局文件_03

android viewModel 初始化传参 android模型_布局文件_04

android viewModel 初始化传参 android模型_接口实现_05

3.Persenter层(model和view交互的桥梁)

(1)接口,model和view交互的逻辑接口,model请求完之后的毁回调接口

(2)接口实现类,实现具体的Presenter类逻辑

android viewModel 初始化传参 android模型_业务逻辑_06

android viewModel 初始化传参 android模型_布局文件_07

android viewModel 初始化传参 android模型_业务逻辑_08

三、

MVP模式的整个核心流程:

View与Model并不直接交互,而是使用Presenter作为View与Model之间的桥梁。其中Presenter中同时持有View层的Interface的引用以及Model层的引用,而View层持有Presenter层引用。当View层某个界面需要展示某些数据的时候,首先会调用Presenter层的引用,然后Presenter层会调用Model层请求数据,当Model层数据加载成功之后会调用Presenter层的回调方法通知Presenter层数据加载情况,最后Presenter层再调用View层的接口将加载后的数据展示给用户。