当前位置:首页 > JavaScript

js 实现mvc

2026-04-03 23:11:08JavaScript

实现 MVC 模式的 JavaScript 示例

MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的数据、用户界面和控制逻辑。以下是 JavaScript 实现 MVC 的核心方法:

模型(Model)部分

模型负责管理数据和业务逻辑。通常包含数据操作和事件通知机制。

class Model {
  constructor() {
    this.data = {};
    this.listeners = [];
  }

  setData(key, value) {
    this.data[key] = value;
    this.notify(key);
  }

  getData(key) {
    return this.data[key];
  }

  addListener(listener) {
    this.listeners.push(listener);
  }

  notify(key) {
    this.listeners.forEach(listener => listener.update(key));
  }
}

视图(View)部分

视图负责显示数据和接收用户输入。它订阅模型的变化并更新显示。

class View {
  constructor(model, controller) {
    this.model = model;
    this.controller = controller;
    this.element = document.getElementById('app');
    this.model.addListener(this);
  }

  render() {
    const data = this.model.getData('message');
    this.element.innerHTML = `<div>${data || ''}</div>
      <button id="changeBtn">Change Message</button>`;
    this.element.querySelector('#changeBtn')
      .addEventListener('click', () => this.controller.handleClick());
  }

  update(key) {
    if (key === 'message') {
      this.render();
    }
  }
}

控制器(Controller)部分

控制器处理用户输入并更新模型。

class Controller {
  constructor(model) {
    this.model = model;
  }

  handleClick() {
    this.model.setData('message', 'New Message at ' + new Date().toLocaleTimeString());
  }
}

初始化应用

将各组件连接起来创建完整应用:

const model = new Model();
const controller = new Controller(model);
const view = new View(model, controller);

view.render();

替代实现方案

使用观察者模式简化模型和视图的通信:

// 简化版模型
class SimpleModel {
  constructor() {
    this._data = {};
    this._callbacks = {};
  }

  on(event, callback) {
    this._callbacks[event] = callback;
  }

  set(key, value) {
    this._data[key] = value;
    if (this._callbacks[key]) {
      this._callbacks[key](value);
    }
  }
}

// 使用示例
const simpleModel = new SimpleModel();
simpleModel.on('text', value => {
  document.getElementById('output').textContent = value;
});

document.getElementById('input').addEventListener('input', (e) => {
  simpleModel.set('text', e.target.value);
});

使用现代框架的MVC

现代前端框架如React/Vue/Angular已经内置了MVC-like结构:

js 实现mvc

  • React: 组件作为视图,状态作为模型,事件处理作为控制器
  • Vue: 数据绑定自动处理模型-视图同步,方法作为控制器
  • Angular: 明确的组件(视图)、服务(模型)和组件类(控制器)分离

这些实现展示了如何在纯JavaScript中构建MVC架构,从基础实现到优化版本,以及与现代框架的对比。核心思想始终是分离关注点,使数据管理、用户界面和业务逻辑保持独立。

标签: jsmvc
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…