MVC、MVVM和单向数据流的对比

news/2025/3/22 1:57:34

前端开发本质上是一种展现层开发,我思考了一下这句话,这句话用人话说就是前端开发本身就是写界面的。但是别人能把写界面的能总结成下面一个循环,我发现这真的是能力了。如下图,有略微的改动:

clipboard.png

下面就开始进入正题了。

基于MVC的前端开发
简单的MVC
先看下图:
clipboard.png

  1. 用户操作界面
  2. 当用户操作的视图的时候会派发一个事件给Action
  3. 当Action接受到这个事件的时候,调用Model对应的方法

演进的前端MVC

clipboard.png

  1. 用户操作界面
  2. 当用户操作的视图的时候会派发一个事件给Action
  3. 当Action接受到这个事件的时候,调用Model对应的方法
  4. Model得知view改变了,然后进行相应的操作,改变自身所存储的数据
  5. 当Model改变了,派发一个事件给Action

进一步复杂的前端MVC

clipboard.png

  1. 用户操作界面
  2. 当用户操作的视图的时候会派发一个事件给Action
  3. 当Action接受到这个事件的时候,调用Model对应的方法
  4. Model得知view改变了,然后进行相应的操作,改变自身所存储的数据
  5. 当Model改变了,派发一个事件给Action
  6. 当Action知道Model的数据变化的时候,调用views中的方法
  7. view改变自身

但是这样是有下面两个问题的,

  • 交互增加导致view的控制代码迅速膨胀,最终导致代码不可维护
  • Model的控制代码也会变多,

以至于出现下面的状况:

clipboard.png

前端的MVVM
虽然mvc有以上的弊端,但是因为没有一个好的架构思想去取代他,所以也只能用MVC了,但是随着前端angular的横空出世,倡导的MVVM思想也随之深入人心,先看下图:

clipboard.png

  1. view和viewModel的数据双向绑定
  2. 当用户操作view的时候,viewmodel也进行对象对应的变化

这样,我们能通过操作Model来控制view的显示,一个页面的比如能拆分为小功能(注册/登陆、表单提交、XXX功能)这样每个功能对应一个Model,我们就能模块化的管理Model,就变为了下图:

clipboard.png

所以当用户操作界面的时候,我们viewModel就知道是哪部分发生了变化,对应的viewModel就进行改变。

React一种新的思想
了解React的都知道,React对强大的功能就是vdom,能够计算出最有效也是花费最小的vdom和真实dom的差异并进行改变。

下图为MVVM的整体设计思路:

clipboard.png

用户操作view
dispatch view事件给状态管理
状态管理工具更新状态/进行到下一个状态
根据新的状态,render view
React遵从的是单向的数据流:

  • 存在一个Model到React的映射关系,即view的渲染方法
  • view并不知道自己对应Modle哪一块
  • 于是每次Model的变更,view全部更新。React的vdom算法保证了render的高效

MVVM和React
要解决的问题: 复杂的web交互导致view更新逻辑的爆炸

解决思路:

  • MVVM:记录Model、双向绑定,Model变更时更新view对应部分
  • React:实现view高效更新算法,Model变更时更新整个view

MVVM的实现是在工程上进行解决,React在解决思路(算法)上进行解决

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/woshina...


https://dhexx.cn/news/show-2442988.html

相关文章

Ubuntu卡在Logo界面

本文主要针对误操作chmod -R 777 /etc ,导致Ubuntu卡在Logo界面。 输入如下代码 chmod 755 /etc 重启即可!转载于:https://www.cnblogs.com/genghenggao/p/10323496.html

信安软考 第八章 防火墙技术与原理运用

防火墙概述 ※防火墙类型与实现技术 ※防火墙主要产品与技术指标 ※防火墙体系结构类型 ※防火墙技术应用 ※※ 命题规则:上午选择题2分,下午案例高概率5-10分 作为一名信息安全工程师,配置防火墙应该是基本能力,这一张相对来说很…

深度分析射频电路的原理及应用

什么是射频电路 射频简称RF,射频就是射频电流,它是一种高频交流变化电磁波的简称。每秒变化小于1000次的交流电称为低频电流,大于1000次的称为高频电流,而射频就是这样一种高频电流。 射频电路指处理信号的电磁波长与电路或器件…

C#窗体程序与sql sever 数据库链接

一、所用工具 Visual Studio 2017和SQL Server Management Studio 2012 二、连接 打开SQL Server Management Studio 2012,点击新建查询,通过代码创建数据库,代码如下: 1 create database data1      --创建数…

wincap安装内幕

安装内幕, 呵呵, 似乎很高深的样子. 其实很简单。这两天公司的同事提了一个需求,要搞清楚winpcap软件安装真正做了什么,因为我们不想要winpcap的安装界面。在用google在网上搜了一番之后,发现原来安装软件原来这么简单,软件安装包…

Zabbix 监控redis

Zabbix 监控redis 1.监控脚本,github上的 [rootlocalhost ~]# cat /etc/zabbix/script/redis-status.sh #!/bin/bash#Redis statusMETRIC"$2" SERV"$1" DB"$3"PORT"6379"if [[ -z "$1" ]]; thenecho "Plea…

基于电磁兼容技术的多层PCB布线设计需要注意的事项

一、前言 电磁兼容(Electro-MagneticCompatibility,简称EMC)是一门新兴综合性学科,它主要研究电磁干扰和抗干扰问题。电磁兼容性是指电子设备或系统在规定的电磁环境电平下,不因电磁干扰而降低性能指标,同时它们本身产生的电磁辐射…

React事务的一些理解

学习React有一段时间了,刚接触不久对于React神奇的操作很好奇,迫不及待看了源码看过几遍源码总是一知半解,最近有时间再次学习React的相关知识,比如setState, componentDidMount等,意识到了之前被忽略提及的知识点&…

信安软考 第十一章 网络物理隔离技术与应用

目录汇总 一、网络物理隔离概述 1.1 网络物理隔离概念 随着网络攻击技术不断增强,恶意入侵内部网络的风险性也相应急剧提高。同时,内部网的用户因为安全意识薄弱,可能有意或者无意地建敏感数据泄露出去。因此,就有专家提建议&am…

ios应用数据存储方式(Sqlite)

一. 简介Sqlite:主要用于大数据的存储Sqlite的使用步骤:1.导入头文件2.一般把数据库文件放入沙盒,所以需要先设定存放路径3.打开数据库--用sqlite3_open方法4.创建数据列表5.然后就可以对Sqlite 数据库进行 增&#x…