MVP Model View Presenter
1. MVC Model View Controller
关于探讨MVC思想的早期文章:The original MVC reports (1978年)
- Model:数据,包括数据本身和处理数据的逻辑。
- View :数据的表现形式,将数据及数据的变化呈现给用户。
- Controller:数据的获取,如用户的输入,将用户的命令转化成消息传递给model或view,是一个数据信息转换传递者。
现在有的MVC模式框架已经写成了:
将Controller 放在了Model和View之间。
Controller将消息传递给Model,Model处理完数据后是先将数据的变化通知给Controller,再由Controller来通知View来变化视图的。
即Controller成为在Model和View之间双向传递数据的中间协调者。
关系为: View <——> Controller <——> Model(注:名字称谓变化,关键是核心思想,即低耦合,高复用,易测试,好维护)
和MVP非常类似。
2.MVP
区别于传统MVC模式在于 将Model和View通过Presenter隔开,不允许Model与View直接通信,而是通过Presenter中间者传递信息。
Model (饭菜)
数据加工处理 数据的获取 解析 存储 分发 增删改查数据源:内存 磁盘 网络
Presenter (服务生)
将数据与视图信息之间的传递 将View传来的需求进行一定校验后交给Model处理,再把处理后的结果返回View,将逻辑代码包揽,减轻了Activity的负担
View (客官、用户)
控制与用户交互的显示 一个View可以对应多个或一个Presenter Activity Fragment
在Android中,MVP模式把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类未变化。
3.具体实例用法:
3.1 入门:常见的用户登录例子
项目结构:
说明:
1 创建 IView 接口,把所有视图逻辑的接口都放在这里,其实现类是当前的 Activity/Fragment。
2 创建 IPresenter 接口,把所有业务逻辑的接口都放在这里,并创建它的实现类 PresenterCompl(在这里可以方便地查看业务功能,由于接口可以有多种实现所以也方便写单元测试)。
3 Activity 里包含了一个 IPresenter,而 PresenterCompl 里又包含了一个 IView 并且依赖了 Model。Activity 里只保留对 IPresenter 的调用,其它工作全部留到 PresenterCompl 中实现。
4 Model 并不是必须有的,但是一定会有 View 和 Presenter。
5 即MVP 的主要特点就是把 Activity 里的许多逻辑都抽离到 View 和 Presenter 接口中去,并由具体的实现类来完成。所以这种写法会多了许多 IView 和 IPresenter 的接口。
Github连接: MVPDemo01