MVC、MVP的简单学习

唠嗑

架构方面的知识感觉还是要学一点的,毕竟假如代码量很小的话,确实不用使用架构,直接写就好了。但是假如代码量大的话,用架构弄起来,会让逻辑非常清楚。

MVC

MVC,全称Model-View-Controller,在这种架构模式里,程序被分成了三层,也就是Model层(M),View层(V),Controller层(C),每个层负责一部分,从而实现业务的分离。

  • Model层
    这一层主要负责的就是业务逻辑和业务数据。在这一层,model通常被分为业务数据模型和业务逻辑模型,业务数据模型负责处理一些数据,业务逻辑模型则实现一些业务操作。

  • View层
    这一层主要负责视图的显示,直观地反映出来就是用户界面。

  • Controller层
    这一层主要就是负责接收请求,协调调度V层和M层

三层之间可以相互请求,如下图:
MVC、MVP的简单学习
那他们三层之间,是怎么样进行交互的呢?我们来举一个例子看看。
1、用户看到由View视图呈现出来页面。
2、用户在这个页面进行了输入操作,然后点击提交了请求。(V——>C)
3、这个请求被提交到了C层,从而C层开始受理这个请求,它会把请求中包含的数据封装起来传给M层,然后让M层进行状态更新(C——>M),之后会选择合适的视图来切换(C——>V)。
4、M层开始处理用户请求的业务功能,然后进行状态的更新,下一步就是让V层的视图随着M层的一些状态数据变换而变换。M层可以直接告诉V层“我的状态数据发生了变换”(M——>V),然后V层会对M层进行状态查询,然后更新自己的视图。(V——>M)。或者M层告诉C层“我的数据发生了改变”(M——>C),然后C层告诉V层要进行数据更新(C——>V)。
找了一份还挺容易理解的参考一下:
MVC模式简介

MVP

MVP,全称Model-View-Presenter,还是一样把程序分为三层,M层,V层,以及P层。
M层负责数据的获取和处理,V层还是一样负责显示页面,P层负责逻辑控制,它持有M层和V层的对象,对业务逻辑进行处理,同时也处理Model数据,再发给V层。
与MVC不同的是,在MVC中。View层可以直接读取Model层的数据,但是在MVP模式中,V层不和M层直接打交道,而是通过P层进行交互。
大概就是这样:
MVC、MVP的简单学习

还是一样举个例子看看他们之间的交互
1、View呈现视图给用户看
2、用户点击,出现请求,请求被传递到P层。(V——>P)
3、P层控制M层获取数据(P——>M),同时通知V层显示进度条(P——>V)
4、M层通知P层处理回调。(M——>P)
5、回调处理完就更新数据,关闭进度条。(P——>V)

MVC和MVP的比较

1、在MVC中,V层可以直接访问M层,导致原本只是控制视图的层不可避免的会有逻辑,增加了耦合性。而设计模式一般要求低耦合。
2、在MVP中,P层的功能会相对沉重,因为负责双向交互,这样加重了P层的负担。不过因此M层与V层实现了分离,有利于维护,且方便测试。
3、MVP中,P层和V层通过接口通信,在一些多接口情况下会加大成本。
4、看到了再加