MVC 和 MVVM 架构模式:基础知识与实践

MVC 和 MVVM 架构模式:基础知识与实践

在软件开发中,MVC(Model-View-Controller)和 MVVM(Model-View-ViewModel)是两种常见的架构模式,它们通过分离关注点来优化代码结构和提高开发效率。下面我们将详细介绍这两种模式的基础知识、适用场景以及实践案例。

MVC 架构

概述

  • 组件 :
    • Model:负责存储数据和业务逻辑。
    • View:用户界面,负责展示数据。
    • Controller:处理用户输入,更新 Model 和 View。
  • 数据流 :
    1. 用户与 View 交互。
    2. View 通知 Controller。
    3. Controller 处理业务逻辑并更新 Model。
    4. Model 更新后通知 View。
    5. View 更新界面。

适用场景

  • 小型应用:适合传统的 Web 应用、CRUD 系统等。
  • 单一用户界面:如果只需要一个前端展示页面,MVC 是一个合适的选择。
  • 复杂系统:在大型系统中,MVC 可能会导致耦合度高,但仍可通过三层架构来管理复杂性。

示例代码(Java)

java 复制代码
// Model
public class User {
    private String name;
    private String password;
    // getter 和 setter
}

// Controller
public class UserController {
    public void login(User user) {
        // 处理登录逻辑
        if (user.getName().equals("admin") && user.getPassword().equals("123")) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }
    }
}

// View
public class LoginView {
    public void showLoginResult(boolean success) {
        if (success) {
            System.out.println("欢迎登录");
        } else {
            System.out.println("登录失败,请重试");
        }
    }
}

MVVM 架构

概述

  • 组件 :
    • Model:存储数据和业务逻辑。
    • View:用户界面,负责展示数据。
    • ViewModel:连接 Model 和 View,处理数据绑定。
  • 数据流 :
    1. 用户与 View 交互。
    2. View 通过数据绑定自动更新 ViewModel。
    3. ViewModel 更新 Model。
    4. 数据变化反映在 View 上。

适用场景

  • 复杂用户界面:适合具有复杂交互和频繁更新的应用。
  • 单页面应用(SPA):MVVM 适用于 Vue.js、Angular 等框架,提供强大的数据绑定机制。
  • 多平台支持:适合需要在多个平台(移动、桌面)上运行的应用。

示例代码(JavaScript with Vue.js)

javascript 复制代码
// Model
class User {
    constructor(name, password) {
        this.name = name;
        this.password = password;
    }
}

// ViewModel
class LoginViewModel {
    constructor() {
        this.user = new User("", "");
        this.isLoggedIn = false;
    }

    login() {
        if (this.user.name === "admin" && this.user.password === "123") {
            this.isLoggedIn = true;
        } else {
            this.isLoggedIn = false;
        }
    }
}

// View

    
        
        
        登录
        登录成功
        登录失败
    



export default {
    data() {
        return {
            viewModel: new LoginViewModel()
        }
    }
}

总结

  • MVC 适合小型、传统应用,注重用户输入和控制器的作用。
  • MVVM 适合复杂、数据驱动的应用,注重数据绑定和自动同步。
特征 MVC MVVM
数据绑定 手动管理 自动双向绑定
耦合度 高 低
适用场景 小型应用、传统 Web 应用 复杂界面、SPA、多平台应用
开发效率 需要手动更新 UI 自动更新 UI
可维护性 较低 较高

通过对比,我们可以看到 MVC 和 MVVM 各有其优缺点,选择哪种架构取决于项目的具体需求和复杂度。

相关推荐
北漂人Java20 分钟前
单智能体三:Router-Skill 工业级 Agent 分工解耦架构,解决大模型技能泛滥难题
架构
道尔柯南1 小时前
C++ 内存管理详解:从 malloc/free 到 new/delete
c++·面试
CoderYanger1 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
Thneonl1 小时前
Claude Code 频繁 Compacting?发布次日我根治了 2 个痛点
后端·rust
懿路向前2 小时前
唤醒工作台全实录(六):数据层——5ms 竞态窗口与“查询即引用“
华为·架构·harmonyos
pt10432 小时前
Cisco设备网络安全系列-20:DevSecOps集成
网络·安全·架构
ai_xiaogui2 小时前
PanelAI项目实战:从AI一键生成到企业级AI基础设施操作系统PPT手搓复盘与架构落地
人工智能·架构·一键部署·panelai·企业级ai基础设施操作系统·ai智能底层操作系统·算力变现
Dawson Zhu2 小时前
【Runtime推理引擎①】Runtime架构设计:从Session到Graph Executor的完整骨架
人工智能·语言模型·架构·aigc·agi
郝学胜-神的一滴2 小时前
AI 编程智能体 20:技术栈选型与架构落地全攻略
人工智能·python·架构·langchain·1024程序员节·智能体
microrain3 小时前
跟着一条属性报文走一遍 SagooIoT 的接入链路
物联网·架构·golang·sagooiot