JS——MVC模式

JavaScript中的MVC模式:简介与实例演示 在上面的示例中,我们首先创建一个User模型的实例,然后创建一个UserView视图的实例,最后创建一个UserController控制器的实例。在上面的示例中,UserView类表示一个用户界面,它通过HTML中的元素来展示用户的名称和电子邮件。在上面的示例中,UserController类表示一个控制器,它接收来自视图的用户输入,并根据输入更新模型。在上面的示例中,User类表示一个用户对象,具有名称(name)和电子邮件(email)属性,以及获取名称和电子邮件的方法。 阅读详情

架构模式之一:MVC(模型—视图—控制器)
它通过关注点分离鼓励改进应用程序组织。它强调将业务数据(Model)与用户界面(View)隔离,第三个组件(Controller)仍然管理逻辑和用户输入。
如果把MVC想成一个夹心饼干,那么Model和View就是夹心饼干外边的两片,而Controller则是中间的奶油。
1、前端的View是什么?个人理解是,与页面上元素直接相关的部分都属于View。包括html,css和一部分直接控制页面元素的JS。作为观察者模式中的观察者,它可以从Model中得到数据,并将其显示到页面上。而关于数据的变更和请求,则统统交给Controller处理。
2、那么Controller呢?作为Model和View的粘合剂,Controller将View方面的请求转发给合适的Model,在必要的时候也会去更新View。而Controller本身也可以作为Model的观察者,获取Model的变更。而作为Controller本身,就不应该有涉及到页面元素的代码了。
3、最后谈谈Model,与后端的沟通、AJAX请求以及对数据的处理都属于Model的工作。Model本身不知道谁是View,谁是Controller。它只提供一些方法供View和Controller调用,并且将变更通知给它的观察者View或Controller。显然,Model与页面元素之间也解耦了。


示例:(没有使用MVC)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select id="selAnimal">
		<option value="cat">cat</option>
		<option value="fish">fish</option>
		<option value="bird">bird</option>
	</select>
	<p id="AnimalDo"></p>
	
	<script src="common.js"></script>
	<script>
		$("selAnimal").onchange = function() {
			var thisAnimalDoes;
			switch(this.value) {
				case 'cat':
					thisAnimalDoes = "本猫在睡觉";
					break;
				case 'fish':
					thisAnimalDoes = "本鱼在洗澡";
					break;
				case 'bird':
					thisAnimalDoes = "本鸟在唱歌";
					break;
				default:
					thisAnimalDoes = "陌生人?";
			}
			$("AnimalDo").innerHTML = thisAnimalDoes;
		}

		window.onload = function() {
			$("AnimalDo").innerHTML = "本猫在睡觉";
		}
	</script>
</body>
</html>

示例:(使用MVC)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select id="selAnimal">
		<option value="cat">cat</option>
		<option value="fish">fish</option>
		<option value="bird">bird</option>
	</select>
	<p id="AnimalDo"></p>

	<script src="common.js"></script>
	<script>
		//controller 用户操作功能
		var whatDoesAnimalDo = {
			//选择视图
			start: function() {
				this.view.start();
			},
			//更新视图
			set: function(animalName) {
				this.model.setAnimal(animalName);
			}
		};
		//model 数据操作
		whatDoesAnimalDo.model = {
			//数据
			animalDictionary: {
				cat: "本猫在睡觉",
				fish: "本鱼在洗澡",
				bird: "本鸟在唱歌"
			},
			currentAnimal:null,
			//model负责业务逻辑和数据存储
			setAnimal: function(animalName) {
				this.currentAnimal = this.animalDictionary[animalName] ? animalName : null;
				this.onchange();
			},
			//通知视图更新显示
			onchange: function() {
				whatDoesAnimalDo.view.update(); //应改为观察者模式
			},
			//响应视图对当前状态的查询
			getAnimalAction: function() {
				return this.currentAnimal ? this.animalDictionary[this.currentAnimal] : "陌生人?";
			}
		};
		//视图 $ 改成自己熟悉的 适合自己的
		whatDoesAnimalDo.view = {
			start: function(){
				$("selAnimal").onchange = this.onchange;
			},
			onchange: function() {
				whatDoesAnimalDo.set($("selAnimal").value);
			},
			update: function() {
				$("AnimalDo").innerHTML = whatDoesAnimalDo.model.getAnimalAction();
			}
		};

		window.onload = function() {
			$("AnimalDo").innerHTML = "本猫在睡觉";
		}

		whatDoesAnimalDo.start();

	</script>
</body>
</html>

注:在简单的系统中应用MVC模式,会增加结构的复杂性,并且降低效率。

Backbone.js采用了MVC。
自己曾经用过一个php框架(thinkphp),文件框架就是MVC模式。

参考:

1、 整体维护更容易。数据中心是否改变,什么时候需要更新应用程序这点很清楚,者意味着是Model(模型)或者也可能是Controller(控制器)的变化,或者仅仅是视觉,者意味着View(视图)的改变。

2、解耦Model(模型)和View(视图),意味着它能够更直接地编写业务逻辑的单元测试。

3、在整个应用程序中,底层Model(模型)和Controller(控制器)代码重复(例如我们可能已经使用的)被消除了。

4、取决于应用程序的大小和角色的分离,这种模块性可以让负责核心逻辑的开发人员和负责用户界面的开发人员同时工作。


摘录于:

《JavaScript设计模式》

http://www.cnblogs.com/juicygroup/archive/2013/10/07/3356339.html








掌握现代JavaScript应用架构:MVC模式与Backbone.js 本文深入探讨了在大规模JavaScript应用设计中,为什么jQuery不足以应对所有需求,并介绍了如何通过Backbone.js库实现JavaScript中的MVC模式。文章首先解释了jQuery的局限性,接着阐述了MVC模式的必要性,最后通过Backbone.js框架来实现MVC,让开发者开始熟悉现代JavaScript应用结构设计。 阅读详情

相关推荐

JavaScript MVC模式在NewYearCard项目中的应用解析

本文还有配套的精品资源,点击获取 简介:MVC(Model-View-Controller)模式是一种提高Web应用代码可维护性和可扩展性的设计模式,它将应用分为模型、视图和控制器三个部分。JavaScript虽然主要用于前端开发,但借助框架或库也可实现MVC架构。本简介探讨了MVC在NewYearCard项目中的角色,包括模型、视图、控制器的功能,以及JavaScript...

weixin_35749796的博客 812

谈谈js中的MVC

MVC是一种架构模式,它将应用抽象为3个部分:模型(数据)、视图、控制器(分发器)

苏墨 880

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案

GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。

weixin_35756637的博客 626

用纯 JavaScript 实现的 MVC 程序

我想用model-view-controller架构模式在纯 JavaScript 中写一个简单的程序,于是我这样做了。希望它可以帮你理解 MVC,因为当你刚开始接触它时,它是一个难以理解的概念。 我做了这个todo应用程序,这是一个简单小巧的浏览器应用,允许你对待办事项进行CRUD(创建,读取,更新和删除)操作。它只包含index.html、style.css和script.js三个文...

一只小白奔向大牛的故事 1444

2026 最新实战教程:AI 重构开发全流程(从需求→上线→运维)

1)做什么系统2)技术栈3)功能模块4)部署要求plaintext我要做一个:待办事项(Todo)全栈应用技术栈:前端:React + TypeScript + Tailwind后端:Node.js + Express + MongoDB部署:Docker + 本地运行(后续可上云)功能:- 增删改查任务- 任务状态切换(完成/未完成)- 简单错误处理请按企业级标准生成:架构设计 + 全部代码 + 接口文档 + 启动命令。

qq_35779316的博客 1694

deepseek本地部署及应用部署指南

如果你找到的日志是[send] via NET/IB/0,则表示网络通信是通过IB网络的,但是没有开启GDRDMA技术,则会有大致5%的性能损耗(网传,未实测)。新增的环境变量配置,主要用于启用IB网络通信,而非使用以太网进行通信,详细的每一个参数的具体含义,可以在英伟达NCCL的官方网站上找到说明。下一步,我会对已经完成部署的模型进行压测,来探索系统的性能极限在哪里,以及如何在生产环境中何如进行进一步的性能优化,期待你的关注。

weixin_39797121的博客 2624

JavaScriptMVC之Model

Model顶层负责程序的数据层,使用它可以很容易做以下操作: 1、通过服务端获取和修改数据。 2、监听数据的变化 3、在HTML元素上设置和获取Model 4、分配数组数据 5、其它好东西 Model继承于Class,并且使用REST服务和延迟,所以这些概念是很值得研究的。 1、通过服务端获取和修改数据 Model让连接一个JSON REST服务非常容易。下述的To...

hzylyl2402的专栏 242

计算机导论期末知识点及试题总结 [近三万字总结 · 全]

计算机网络:计算机网络是利用通信线路连接起来相互独立的计算机的集合,其主要目的是实现数据通信和资源共享。 计算机病毒:破坏计算机功能或数据,影响计算机使用,并能自我复制的一组计算机指令或程序。 操作系统:操作系统是由程序和数据结构组成的大型系统软件,它负责计算机的全部软硬件的资源分配,调度和管理,控制各类程序的正常执行,并为用户使用计算机提供良好的环境。 高速缓冲储存器(Cache):位于cpu和内存之间的储存器,其特点是速度快,目的是是储存器的速度与cpu的速度相匹配。 总线:若干信号线的集合,是

这个人好有趣....hh 1万+

JavaScript 的 MVC 模式

摘要: 本文介绍了模型-视图-控制器模式在 JavaScript 中的实现, 在 JavaScript 中,程序员可以根据自己的口味选择编程风格:面向过程或面向对象。 原文:Model-View-Controller (MVC) with JavaScript 作者:Alex@Net 译文:JavaScript 的 MVC 模式

828

Neurocomputing 投稿指南

Generation Information:选择论文所属领域。上传附件(利益声明,手稿,摘要)审稿人偏好:可以选择期待的审稿人。

qq_41174671的博客 2万+

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 245

使用 Node.js 了解 MVC 模式

模型-视图-控制器 (MVC) 模式是 Web 开发中最流行的架构模式之一。通过将应用程序划分为三个相互关联的组件(模型、视图和控制器),MVC 促进了有组织、可维护和可扩展的代码。Node.js 具有异步处理和庞大的生态系统,是构建基于 MVC 的应用程序的绝佳选择,尤其是对于 Web 和 API 开发。本指南探讨了 M...

qq_35485206的博客 1003

BUCK电路三种工作模式全解析:CCM、BCM、DCM到底怎么选?

本文深入解析BUCK电路的CCM、DCM和BCM三种工作模式,通过对比其电流波形、效率、纹波及环路特性,提供基于计算公式的量化判断方法。文章结合电池供电、高精度模拟等具体应用场景,给出明确的模式选型策略与实战设计指南,帮助工程师根据核心需求做出最优决策。

ee345的博客 486

Javascript 的MVC模式(一)

接触过好多语言,无论哪一款新出的语言都坚持宣称自己是简洁,易懂,高效。当然这一切都不重要,你要知道程序猿都很非常懒惰的一种动物,关键是我所接触好多的新语言都不是他们所说的那么易懂,因为无论多么易懂的东西其中总会有其语言设计中的哲学概念,甚至我们装逼点可以认为他是一种精华。类似于JS(即Javascript,虽然身为一名前端设计者,我非常不爽这种仅以文件后缀名来称呼这么伟大的一门语言,但是无奈省力省...

weixin_30765319的博客 489

HybridCLR热更新全流程实操:用Addressables实现资源+代码双热更(Unity 2021版)

本文详细介绍了在Unity 2021 LTS版本中,如何结合HybridCLR代码热更新与Addressables资源管理系统,实现资源与代码的双热更解决方案。通过环境配置、技术架构设计、实战案例和性能优化,帮助开发者解决中大型项目中的依赖管理和版本协同问题,提升游戏迭代效率。

cc789的博客 848

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【转】javascript中MVC模式开发

berggi的专栏 1115

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MVC与MVVM架构模式详解:原理、区别与JavaScript实现

Hi,我是布兰妮甜!前端开发中,良好的架构是代码可维护性的关键。MVC和MVVM作为主流架构模式,能有效组织复杂应用。本文将通过JavaScript示例解析两者的核心思想与应用场景,帮助开发者做出合理选择。

chaosweet的博客 1235

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

完整JavaWeb项目笔记 第十部分-Javascript的MVC设计模式

文章目录一 MVC是一种设计思想二 面向对象的设计三 简单的拆解及拼装 一 MVC是一种设计思想   老生常谈的一个词儿“MVC”,各种框架都会说自己是MVC、MVVC或者其他的云云,那么MVC到底是什么?我个人倾向于这是一种设计思想。将业务设计、数据访问以及请求处理或视图绘制等功能实现分离,各自进行调整时而不会产生严重的耦合问题。这是对代码可维护性、健壮性的一种保障。   在进行服务端设计的时候...

o983950935的博客 270

JavaScript MVC 模式

Javascript MVC 框架很多,比如backbone.js,ember.js 等等 下面给出两个例子用于解释MVC模式: 第一个是:没有使用mvc模式的: [html] view plaincopy >    html xmlns="http://www.w3.org/1999/xhtml">    head>     

ilovejava_2010的专栏 896

js手写MVC模式

效果图如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Doc...

舜岳的博客 420

谈谈JavaScript MVC模式

第一个是:没有使用mvc模式的: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"...

annuobin1120的博客 176
上一篇: 我的第九个AJAX程序(注册页面)
下一篇: JS——Factory(工厂)模式
spfLinux
博客等级 码龄10年 117粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值