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

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

时间2025-06-15 05:01:10分类IT科技浏览4350
导读:目录...

目录

前言

一               、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
帝国cms7.5(企业官网可以用帝国cms吗) 全球虚拟主机排行榜(Namecheap虚拟主机五月特惠 美国主机低至0.99美元/月(美国虚拟主机免费))