MVP简介
MVP(Model,View,Presenter)
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller
使用MVP模式优势
(1)模型与视图完全分离,我们可以修改视图而不影响模型
(2)可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
(3)我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
(4)如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)
MVP模式
Model(数据模型层):
主要负责网络请求、数据库等其它 I/O 操作,和 MVC 中的 Model 层类似
View(视图层):
主要是 Activity、Fragment、XML布局文件
Presenter(控制器层):
自定义的 Presenter 类,类似于 MVC 中 Controller 的作用,是 MVP 中的核心,主要负责 Model 层和 View 层的交互
MVP模式各部分之间的通信都是双向的,View与Model不发生联系,都通过Presenter传递,View非常薄,不部署任何业务逻辑,称为“被动视图”,即没有任何主动性,而Presenter非常厚,所有逻辑都部署在这里。
总结
(1)使用MVP模式,类相比MVC模式会增多,每个页面都会有一个Model(数据模型)、一个Presenter(控制器)、一个Contract(契约接口).
(2)在使用MVP模式,需要在页面销毁时,及时清理Model(cancelTasks)、Presenter(onDettach)中数据和对象.
(3)公共的模型数据接口,可以抽取成公共模型.
(4)View层中View接口中方法命名应通用,防止后续业务逻辑修改,需要更改方法名称.