傻傻分不清的mvc mvp mvvc架构

mvc mvvc mvp这三种架构模式在面试过程中的问题率还是挺高的。这不小白上次就遇到了,面试官问用过mvvc架构模式吗?这给小白问住了,他只记得mvc,mvc组成是视图、控制器、模型,怎么还出来过mvvc模式,多出来的v是啥呢?是面试官问错了吗?本文将讲讲这三种设计模式,让大家彻底熟悉这三种设计模式,以免在面试中受挫。.

一、MVC

1、简介

MVC是最常用服务端web开发架构模式,也是这三个模式中最早使用的,其它两个框架是由它的基础发展而来的。MVC的目的就是将M(模型)和V(视图)的代码分离,且MVC是单向通信,必须通过Controller来链接M和V。跟传统的WebFrom比MVC层次更加清晰、可维护性高、重用性高等特征。具体功能如下:

Model:模型层,数据模型及其业务逻辑,是针对业务模型建立的数据结构,Model与View无关,而与业务有关。
View:视图层,用于与用户实现交互的页面,通常实现数据的输入和输出功能。
Controller:控制器,用于连接Model层和View层,完成Model层和View层的交互。还可以处理页面业务逻辑,它接收并处理来自用户的请求,并将Model返回给用户。
 
2、架构图

傻傻分不清的mvc mvp mvvc架构

上图可以看出他们之间的通信是单向的,呈三角的形状,用户通过Controller请求,完成Model层和View层的交互。

3、MVC的优缺点

1)、优点

耦合性低:视图层和业务层分离,这样就可以更改视图层代码,而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
重用性高:由于视图层和业务层分离,多个视图可以共访问一个模型而不用单独开发,比如手机端视图和网页版视图可以访问同一个模型。
可维护性高:分离视图层和业务逻辑层也使得WEB应用更易于维护和修改,比如前端页面有问题,可以在不影响后端的情况下进行修改和发布。
在团队开发模式下表现更出众。
2)缺点
什么事物都是有两面性的,mvc也有它的缺点,比如不适合小型,中等规模的应用程序、增加系统结构和实现的复杂性、视图对模型数据的低效率访问等。
尤其是框架把业务逻辑大多集中在Controller层,这样加大了Controller的压力,Controller层与View层之间是一一对应的,也让View层的复用的可能性减小。在这种背景下就出现了mvp模式。
二、MVP
1、简介 
   MVP是模型-视图-表示器,它是MVC框架的晚辈,大概晚出现20年,是从MVC模式演变而来的。它们各个层级的职责有相同之处:Model层提供数据,View层负责视图显示,而Presenter(Controller)层负责逻辑的处理。主要不同的是Presenter通信方向变了。具体功能如下:
Model:模型层用于数据查询以及业务逻辑,跟MVC大同小异。
View:视图层用于展示与用户实现交互的页面,通常实现数据的输入和输出功能,跟MVC大同小异。
Presenter:表示器负责连接M层和V层,从而完成Model层与View层的交互,还可以进行一些业务逻辑的处理。
2、架构图

傻傻分不清的mvc mvp mvvc架构

由图可以看出Presenter起到了承上启下的作用,View和Molde层互不干扰,完全可以把View抽出来做成组件,从复用上来说比MVC强。
3、MVP的优缺点
1)、优点
层次清晰:模块职责划分明显,接口功能清晰,Model层和View层分离,修改View而不影响Model。
重用性高:功能复用度高,方便.一个Presenter可以复用于多个View,而不用更改Presenter的逻辑。
开发职责互不影响:如果后台接口还未写好,但已知返回数据类型的情况下,完全可以写出此接口完整的功能。
2)、缺点
当然它的缺点也是明显的,由于View层和Model层都需要经过Presenter层,导致Presenter层比较复杂,维护起来比较麻烦,数据都要经过Presenter层处理,有可能出现View层和Model层数据不一致的问题,为了解决这个问题,后来又有了MVVC模式了。
 
三、MVVC
1、简介 
    mvvc模式也是在mvc模式下进行改造,也是对MVP的升级,它实现的重在数据驱动视图的一种设计模式。MVVC在View Controller与Model之间多了层View Model。View用户行为导致Model更新,View Controller会让自己持有的View Model去更新Model。
Model:模型层用于数据查询以及业务逻辑,跟MVC大同小异。
View:视图层用于展示与用户实现交互的页面,通常实现数据的输入和输出功能,跟MVC大同小异。
ViewModel层:定义数组,用来接收控制中的数据。处理回调(比如:刷新回调、点击cell回调、加载更多回调、动态视图高度回调等等),也是链接Controller和ViewModel的中间层级。它与View之间采用双向绑定,View的变动,自动反映在 ViewModel,反之亦然。
Controller:控制器,用于连接Model层和ViewModel层,完成Model层和ViewModel层的交互。还可以处理页面业务逻辑,它接收并处理来自用户的请求,并将Model返回给用户。
2、架构图

傻傻分不清的mvc mvp mvvc架构

可以看出,用户输入信息,到Controller,然后反馈到ViewModel,它与View之间采用双向绑定。
3、MVVC的优缺点
1)、优点
低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重用性,可以把一些视图逻辑放在一个ViewModel里面,可以使view重用这段视图逻辑。
独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计.
2)、缺点
项目过于复杂,开发入门难度大点。
注意:还有MVVM模式,这种模式在VUE中得到了很好的应用,另外MVVM模式和MVVC这两者的差别比较模糊,小编查了各种资料,也未找到它们的具体不同之处,大家感兴趣可以研究一下这两者之间的差别。MVVM和MVVC模式全栈工程师面试过程中问的比较多,大家注意,特别是其中的双向绑定。
 
结语
    本文讲述了mvc,mvp和mvvc的相关知识点。在面试过程中,后端工程师考的比较多的是MVC;mvp安卓手机软件比较常见, 如果是全栈工程师mvvc问的比较多。涉及架构的深度和广度,水平有限,欢迎大家斧正。希望本文给大家带来收获,对于这三者的关系,欢迎大家留言讨论和吐槽。