若转载教程,请注明出自SW-X框架官方文档1

1、简述

MVP架构模式,是由MVC模式升级而来,起源于Android开发。
因为Android的特殊性,使得Activity模块对应了MVC中的V和C,同时担任两个角色,就有了类似“既当爹又当妈”的感觉,这显然就不符合软件设计原则的“单一职责”原则。
但现实中是很多的APP代码中有这么的处境,特别是Androi原生的很多系统APK包,某些Activity动则几千行代码。
况且,随着项目的深入发展,很多逻辑越来越复杂,Activity处理的东西也会越来越多,代码越来越臃肿。
这样一来维护起来的代价就会越来越高,这是因为View的变化会引起Controller的很多变化,反之亦然。
用一句大白话来说明,就是某一段代码的变动会引起很多其他相关联的代码的改动,而程序员都是懒惰的,所以会恨死这样的代码。
而MVP的出现,就是为了要减轻在Android中的这种困惑。
MVP是基于MVC的,它的架构图如下:
image.png
如图分解如下:

  1. M(Model) 数据相关层
  2. V(View) 视图层,如Activity上的布局
  3. P(Presenter) 纽带层,用来连接ModelView.

2、MVP开发在Android中的基本流程

  1. View层定义View.interface,用来定义View的行为。一般由Activity或者是Fragment来实现这个接口,它定义了View视图的各种变化,如设置Textview,加载对话框,更新进度条等。
  2. Model层定义Modle.interface,这个是用来定义数据层发生变化时的通知接口,因为Model不能直接与View交互,所以它与Presenter交互,然后再通过Presenter间接达到与View的交互。
  3. Presenter翻译的意思是主持人,也就是主持场合,控制节奏的意思。在这时Presenter就负责具体的业务逻辑,请求数据,把数据送到Model,或者监听Model的数据变化,接受View层的动作,负责通过通知View层的视图变化。

如果跟MVC的架构图对比的话,可以发现它们有相似之处也有不同。

3、相似之处

模块划分的相似:
MVC由Model、View、Controller构成。
MVP由Model、View、Presenter构成。

4、不同的地方

MVP中Presenter取代了MVC中的Controller
MVC中Model、View、Controller之间相互发生通信,而MVP中Model与Presenter相互通信,View与Presenter相互通信,而Model与View之间没有通信。

5、总结

在现今的PHP框架中,几乎都支持MVC/MVP架构模式,而这只取决于使用者的开发习惯。