当前位置: 首页 > ds >正文

MVVM 分层思想详解

MVVM 分层思想详解

MVVM(Model-View-ViewModel)是一种前端架构模式,核心思想是将用户界面逻辑与业务逻辑分离,实现数据驱动视图的开发方式。Vue.js 正是基于 MVVM 模式设计的框架。

Model
ViewModel
View
一、三层架构解析
职责Vue 中的对应实现特点
Model管理应用数据和业务逻辑data 对象、API 请求返回数据纯数据,不涉及 UI 逻辑
View负责 UI 呈现和用户交互模板(template)、DOM 结构声明式渲染,不处理数据逻辑
ViewModel连接 Model 和 View 的桥梁Vue 实例(组件实例)双向数据绑定,无 DOM 操作

二、各层交互原理
  1. Model → ViewModel → View

    • 当 Model 数据变化时,通过 ViewModel 的响应式系统自动更新 View
    // Model
    data: { message: 'Hello' }// ViewModel(Vue 内部实现)
    Object.defineProperty(this, 'message', {set(newVal) {updateView() // 触发视图更新}
    })// View
    <div>{{ message }}</div>
    
  2. View → ViewModel → Model

    • 用户操作 View 时,通过 ViewModel 的事件监听更新 Model
    <!-- View -->
    <input v-model="message"><!-- ViewModel 等价实现 -->
    <input :value="message"@input="message = $event.target.value"
    >
    

三、MVVM 的核心优势
  1. 数据驱动视图
    只需关注数据变化,DOM 操作由框架自动处理

    // 传统方式
    document.getElementById('txt').innerText = newValue// MVVM 方式
    this.message = newValue // 自动更新所有相关视图
    
  2. 双向绑定机制
    通过 v-model 等指令实现数据与视图自动同步

    <input v-model="searchText">
    <p>搜索结果:{{ results }}</p>
    
  3. 关注点分离

    业务逻辑
    Model
    界面展示
    View
    数据绑定
    ViewModel
  4. 可测试性增强

    • Model:可独立测试业务逻辑
    • ViewModel:可测试数据转换逻辑
    • View:只需测试UI展示

四、Vue 中的具体实现
  1. 响应式系统

    // ViewModel 的核心实现
    const vm = new Vue({data: { // Modelcount: 0},methods: { // 业务逻辑increment() {this.count++}},computed: { // 数据转换层doubleCount() {return this.count * 2}}
    })
    
  2. 模板系统(View)

    <!-- View 层 -->
    <div id="app"><button @click="increment">增加</button><p>计数:{{ count }}</p><p>双倍:{{ doubleCount }}</p>
    </div>
    
  3. 更新流程

    sequenceDiagram
    用户->>View: 点击按钮
    View->>ViewModel: 触发 increment 方法
    ViewModel->>Model: 更新 count 数据
    Model->>ViewModel: 触发响应式更新
    ViewModel->>View: 自动更新 DOM
    

五、与传统 MVC 的对比
特性MVCMVVM
控制中心ControllerViewModel
数据流向单向(View→Controller→Model)双向自动同步
DOM 操作需要手动操作 DOM自动更新
耦合度View 与 Model 耦合完全解耦
典型框架Backbone.jsVue.js, Angular

六、最佳实践
  1. 保持 Model 纯净

    // 反例:在 Model 中包含视图逻辑
    data: {user: {name: 'John',displayName: '👑' + name // 视图逻辑混入数据层}
    }// 正例:使用 computed
    computed: {displayName() {return '👑' + this.user.name}
    }
    
  2. ViewModel 职责清晰

    // 避免在 ViewModel 中操作 DOM
    mounted() {// 错误示范document.querySelector('.btn').addEventListener(...)// 正确方式:使用声明式指令// <button @click="handleClick">
    }
    
  3. 组件化实现分层

    组件内部
    Model
    子组件
    ViewModel
    View
    父组件
    子组件

总结:MVVM 的核心价值

  1. 生产力提升:减少 30%-50% 的 DOM 操作代码
  2. 维护性增强:数据流清晰,定位问题更快
  3. 性能优化:虚拟 DOM 减少不必要的渲染
  4. 团队协作:设计师专注 View,开发者专注 ViewModel 和 Model

“MVVM 不是框架,而是一种架构思想。Vue 的响应式系统实现了 ViewModel 层,开发者只需关心数据变化,让视图成为数据的自然映射。” — Vue 核心开发团队

通过 MVVM 分层,Vue 实现了:

  • 视图声明化:用模板描述 UI
  • 数据响应化:自动追踪依赖
  • 更新自动化:数据变 → 视图变
  • 逻辑组件化:高内聚低耦合

这种分层思想从根本上改变了前端开发模式,使构建复杂交互应用变得更加高效和可维护。

http://www.xdnf.cn/news/13763.html

相关文章:

  • Binder
  • matlab脉冲信号并绘制波形2025.6.11
  • 12.安卓逆向2-frida hook技术-HookJava重载方法
  • element-MessageBox 弹框组件 调整按钮位置(确认在左,取消在右)、删除场景回车调取消事件,默认调确认事件
  • 串口通信入门基础
  • 【Linux】Makefile基础
  • Halcon深度图转换(real、uint2、byte)
  • 基本多线程编译make命令
  • 达梦数据库raw绑定磁盘-DSC集群部署
  • 再说一说LangChain Runnable接口
  • 禁止虚拟机里的Win10的Windows Defender
  • 【热更新知识】学习一 Lua语法学习
  • 【学习笔记】计算机操作系统(六)—— 输入输出系统
  • 基于 Spring AI 的 MCP 客户端/服务端实现
  • Java中的设计模式:23种经典模式在实际项目中的应用案例
  • 一款包含150个APP移动端网站UI的psd适用于服装鞋类社交电商项目
  • 论文略读:Mixture-of-Agents Enhances Large Language Model Capabilities
  • 力扣HOT100之贪心算法:55. 跳跃游戏
  • 如何在 Docusign 批量发送信封?
  • Cesium 常见方法汇总
  • Qwen家族系列模型概述
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十四)
  • 用python判断一串字符是否属于中文的6种方法
  • 3 Studying《深入理解Android卷(邓凡平)》1
  • 【kafka】消息模型与工作原理详解
  • 如何抓取DP_AUX辅助通道数据
  • 在代码中使用uView里calendar中的Slot, tooltip 插槽
  • SQL 注入(SQL Injection)
  • UE5 学习系类(七)导入bridge资产包
  • CodeForces 228D. Zigzag