大家都熟知我们搭建框架用的是MVC
1.View 传送指令到 Controller
2.Controller 完成业务逻辑后,要求 Model 改变状态
3.Model 将新的数据发送到 View,用户得到反馈
大家想过这样会有什么问题吗?显然是有的,不然为什么会有MVP和MVVM的诞生呢,是吧。问题就在于xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。大家回想一下自己写的代码,如果是一个逻辑很复杂的页面,activity或者fragment是不是动辄上千行呢?这样不仅写起来麻烦,维护起来更是噩梦。
MVC还有一个重要的缺陷,view层和model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力 。此时就出现了MVP
MVP
MVP 模式将 Controller 改名为 Presenter
它们之间最大的区别就是model层与View层之间的交互 MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的!
顾名思义 Model View Presenter
View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互
所谓的mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)
对于Android来说,MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理充当了view 与model的桥梁。使view层与model层不在相互可知,完全的解耦。后期易维护
MVP是通过抽取接口的方式来规范化代码 不让你的代码冗余!
首先说一下View层 我们把View所有我们能够看见的操作抽取成一个接口 在一个Activity中我们实现这个接口来与Presenter层进行解耦
Model层 它包括所有的数据请求 数据库的操作 耗时的操作 我们通过接口将这些数据传到Presenter层
Presenter层 持有View层和Model层的数据 是它们之间的桥梁