首页IT科技mvc架构类图(三种架构模式——MVC、MVP、MVVM)

mvc架构类图(三种架构模式——MVC、MVP、MVVM)

时间2025-08-04 18:54:15分类IT科技浏览5105
导读:目录...

目录

前言

一                 、MVC(Model-View-Controller)

1                         、简介

2        、框架图

二                 、MVP(Model-View-Presenter)

1                          、简介

2        、框架图

三        、MVVM(Model-View-ViewModel)

1                          、简介

2                 、框架图

四        、总结

前言

MV系列框架中                 ,M和V分别指Model层和View层                         ,但其功能会因为框架的不同而变化                 。Model层是数据模型        ,用来存储数据;View层是视图         ,展示Model层的数据                         。

虽然在不同的框架中                         ,Model层和View层的内容可能会有所差别                 ,但是其基础功能不变         ,变的只是 数据的传输方式         。

一                         、MVCModel-View-Controller

1                 、简介

MVC是模型-视图-控制器                         ,它是MVC、MVP                         、MVVM这三者中最早产生的框架                 ,其他两个框架是以它为基础发展而来的         。

MVC的目的就是将M和V的代码分离,且MVC是单向通信                         ,必须通过Controller来承上启下                         。

Model:模型层                         ,数据模型及其业务逻辑,是针对业务模型建立的数据结构                 ,Model与View无关                         ,而与业务有关                 。

View:视图层        ,用于与用户实现交互的页面                 ,通常实现数据的输入和输出功能         。

Controller:控制器                         ,用于连接Model层和View层        ,完成Model层和View层的交互                         。还可以处理页面业务逻辑         ,它接收并处理来自用户的请求                         ,并将Model返回给用户                 。

2                         、框架图

MVC框架图如图1.1示。

图1.1  MVC框架图

上图可以看出各部分之间的通信是单向的                 ,呈三角形状                         。

具体MVC框架流程图如图1.2所示                         。

图1.2  MVC框架流程图

从上图可以看出         ,Controller层触发View层时                         ,并不会更新View层中的数据                 ,View层的数据是通过监听Model层数据变化自动更新的,与Controller层无关。换言之                         ,Controller存在的目的是确保M和V的同步                         ,一旦M改变,V应该同步更新                 。

同时                 ,我们可以看到                         ,MVC框架大部分逻辑都集中在Controller层        ,代码量也集中在Controller层                 ,这带给Controller层很大压力                         ,而已经有独立处理事件能力的View层却没有用到;而且        ,Controller层与View层之间是一一对应的         ,断绝了View层复用的可能                         ,因而产生了很多冗余代码                         。

为了解决上述问题                 ,MVP框架被提出        。

二、MVPModel-View-Presenter

1                 、简介

MVP是模型-视图-表示器         ,它比MVC框架大概晚出现20年                         ,是从MVC模式演变而来的                 。它们的基本思想有相同之处:Model层提供数据                 ,View层负责视图显示,Controller/Presenter层负责逻辑的处理                         。将Controller改名为Presenter的同时改变了通信方向        。

Model:模型层                         ,用于数据存储以及业务逻辑         。

View:视图层                         ,用于展示与用户实现交互的页面,通常实现数据的输入和输出功能                         。

Presenter:表示器                 ,用于连接M层                         、V层                         ,完成Model层与View层的交互        ,还可以进行业务逻辑的处理                 。

2        、框架图

MVP框架图如图2.1示         。

图2.1  MVP框架图

上图可以看出各部分之间的通信是双向的                         。

在MVC框架中                 ,View层可以通过访问Model层来更新                         ,但在MVP框架中        ,View层不能再直接访问Model层         ,必须通过Presenter层提供的接口                         ,然后Presenter层再去访问Model层                 。

具体MVP框架流程图如图2.2所示。

图2.2  MVP框架流程图

从上图可以看出                 ,View层和Model层互不干涉         ,View层也自由了很多                         ,所以View层可以抽离出来做成组件                 ,在复用性上就比MVC框架好很多                         。

但是,由于View层和Model层都需要经过Presenter层                         ,导致Presenter层比较复杂                         ,维护起来也会有一定的问题;而且,因为没有绑定数据                 ,所有数据都需要Presenter层进行“手动同步                 ”                         ,代码量较大        ,虽然比起MVC框架好很多                 ,但还是有比较多冗余部分                         。

为了让View层和Model层的数据始终保持一致                         ,MVVM框架出现了。

三                 、MVVMModel-View-ViewModel

1                          、简介

MVVM是模型-视图-视图模型                 。MVVM与MVP框架区别在于:MVVM采用双向绑定:View的变动        ,自动反映在ViewModel         ,反之亦然                         。

Model:数据模型(数据处理业务)                         ,指的是后端传递的数据        。

View:视图                 ,将Model的数据以某种方式展示出来                 。

ViewModel:视图模型         ,数据的双向绑定(当Model中的数据发生改变时View就感知到                         ,当View中的数据发生变化时Model也能感知到)                 ,是MVVM模式的核心                         。ViewModel 层把 Model 层和 View 层的数据同步自动化了,解决了 MVP 框架中数据同步比较麻烦的问题                         ,不仅减轻了 ViewModel 层的压力                         ,同时使得数据处理更加方便——只需告诉 View 层展示的数据是 Model 层中的哪一部分即可        。

2        、框架图

MVVM框架图如图3.1示         。

图3.1  MVVM框架图

上图可以看出各部分之间的通信是双向的,而且我们可以看出                 ,MVVM框架图和MVP框架图很相似                         ,两者都是从View层开始触发用户的操作        ,之后经过第三层                 ,最后到达Model层                         。而关键问题就在于这第三层的内容                         ,Presenter层是采用手动写方法来调用或修改View层和Model层;而ViewModel层双向绑定了View层和Model层        ,因此         ,随着View层的数据变化                         ,系统会自动修改Model层的数据                 ,反之同理                 。

具体MVVM框架流程图如图3.2所示         。

图3.2  MVVM框架流程图

从上图可以看出         ,View层和Model层之间的数据传递经过了ViewModel层                         ,ViewModel层并没有对其进行“手动绑定                         ”                 ,不仅使速度有了一定的提高,代码量也减少很多                         ,相比于MVC框架和MVP框架                         ,MVVM框架有了长足的进步                         。

从3.1框架图可以看出,MVVM框架有大致两个方向:

1        、模型-->视图     ——实现方式:数据绑定

2                          、视图-->模型     ——实现方式:DOM事件监听

存在两个方向都实现的情况                 ,叫做数据的双向绑定                 。双向数据绑定可以说是一个模板引擎                         ,它会根据数据的变化实时渲染。如图3.3所示        ,View层和Model层之间的修改都会同步到对方                         。

图3.3  数据的双向绑定

MVVM模型中数据绑定方法一般有三种:

数据劫持 发布-订阅模式 脏值检查

补充:Vue.js使用的就是数据劫持和发布-订阅模式两种方法                         。了解Vue.js数据绑定流程前                 ,我们需要了解这三个概念:

Observer:数据监听器                         ,用于监听数据变化        ,如果数据发生改变         ,不论是在View层还是在Model层                         ,Observer都会知道                 ,然后告诉Watcher。 Compiler:指定解析器         ,用于对数据进行解析                         ,之后绑定指定的事件                 ,在这里主要用于更新视图                 。 Watcher:订阅者                         。

接下来看看Vue.js数据绑定的流程:首先将需要绑定的数据劫持方法找出来,之后用Observer监听这堆数据                         ,如果数据发生变化                         ,Observer就会告诉Watcher,然后Watcher会决定让那个Compiler去做出相应的操作                 ,这样就完成了数据的双向绑定        。

四                 、总结

从MVC到MVP再到MVVM                         ,这是一个不断进步的过程        ,后两者都是在MVC基础上发展而来                 ,使用起来更加方便                 。这三者主要的区别在于除Model层和View层之外的第三层的不同                         。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
相机4240(使用D435i相机跑ORB-SLAM2_RGBD_DENSE_MAP-master稠密建图编译(实时彩色点云地图加回环+保存点云地图)) 网站如何快速提升排名(如何提升网站排名?SEO课程来助你一臂之力!)