MVP
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。
MVC
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些 业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
- 1、MVP架构方式:
在MVP模式里通常包含4个要素:
(1) View :负责绘制UI元素、与用户进行交互(在Android中体现为Activity);
(2) View interface :需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试;
(3) Model :负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合);
(4) Presenter :作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
2、理解:
View:对应Activity主要处理界面控件的获取和创建消息控件等纯UI上的操作,View一般有一个ViewInterface,用于获取界面上的控件信息、状态操控View上的控件;
Model:用于和具体数据和业务逻辑打交道,不关心数据从哪里来到哪里去,只关心传入的参数数据要做哪些计算或验证操作,通常参数列表中有用于将结果回传的回调接口(该回调接口也可以写在presenter中),一般包含数据封装的bean对象和数据操作的BeanBiz接口;
Presenter:用于将View和Model结合起来的中间人,将ViewInterface获取的数据交给BeanBiz去处理,然后通过BeanBiz的结果回传接口获取数据处理结果,然后通知对应的View,View根据不同结果去展示不同的控件元素;
(在Presenter中调用BeanBiz中的方法处理通过ViewInterface获取的View元素数据,再根据BeanBiz处理结果调用ViewInterface不同View显示方法。在presenter中调用viewInterface和BeanBiz接口的方法,实现view与model的数据交互。)
View是收购原材料并出售原材料加工后产品的店铺,Model是原材料加工的工厂,presenter比较辛苦,要为View找加工工厂,还要在加工后将获得的产品准确送到对应的店铺。
最后就是在View对应的activity中尽情的使唤presenter吧。。。但是在View层中是不能出现Model层的接口或实体对象的,与model打交道就交给万能的presenter吧。3、区别
最明显的区别就是,MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的。MVP模式:
View不直接与Model交互 ,而是通过与Presenter交互来与Model间接交互
Presenter与View的交互是通过接口来进行的,更有利于添加单元测试
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑MVC模式:
View可以与Model直接交互
Controller是基于行为的,并且可以被多个View共享
可以负责决定显示哪个View4、两篇参考文章链接