经典软件设计模型 - MVC

cocos-creator-puremvc:cocos-creator-puremvc 是一个cocos creator项目基础架构 cocos-creator-puremvc cocos-creator-puremvc 是一个cocos creator项目基础架构。 技术栈 typescript puremvc 安装 使用npm install或yarn,推荐使用后者。如果你更喜欢npm的话,需要修改package.json内的proto编译命令 编译proto npm run proto或yarn proto script目录结构 controller bootstrap 需要初始化的MVC commands 游戏内Command,增加Command基本都应该在这里 StartupCommand.ts 启动Command lib puremvc puremvc源代码和d.ts文件 model vos vo对象 GameProxy.ts 游戏数据代理示例 services 服务 api.ts fetch请求包装 uti 立即下载

原文:http://gaoyong.diandian.com/post/2011-11-02/6443926

这是我目前看到的对MVC描述最清楚的文章


我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型。我们将从两大方面来讨论MVC:

 

  1. 什么是MVC?
  2. M、V、C之间的交流方式是什么样子的?

理解了MVC的概念,对cocoa程序开发是至关重要的。

 

一、MVC的概念

MVC是Model-VIew-Controller,就是模型-视图-控制器,这些都是什么东西呢?

 

MVC把软件系统分为三个部分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。

 

Model = 你的程序是什么(而不是你的程序是如何显示的)

 

让我们举个例子,我们上中学的时候,我们的步步高电子词典中有个游戏叫“雷霆战机”,也就是“打飞机”的游戏,Model就是:你的小飞机的攻击力是多少?你的小飞机上装的是什么武器,炮弹,导弹,还是激光炮?你的小飞机还有多少血?等等。再概括点说,就是你的程序将要实现的功能,或者是它所能干的事情。

 

Controller = 如何使你的模型呈现给用户(程序逻辑)

 

Controller是程序内部的逻辑,大多情况下你将看不到它,它将Model和View捆绑在一起,它将处理用户的输入,例如,你按开炮的键子,Controller就会通过内部的逻辑来处理你的要求,并在屏幕上做出相应的显示,你将看到屏幕上的小飞机发出炮弹击中敌机。这也是Controller控制View的显示的例子。所以你可以把Controller看成是连接M和V的桥梁。

 

 

View = 在屏幕上你所看到的(是你的Controller的“奴才”)

 

接着前面的小飞机,View就是:你的小飞机是什么样子的,有一个还是两个翅膀,有几挺枪炮;还有,你的飞机在屏幕上的位置等等。总之,你在屏幕上看到的组件都可以归类为View。

MVC可以帮助确保帮助实现程序最大程度的可重用性。各MVC元素彼此独立运作,通过分开这些元素,可以构建可维护,可独立更新的程序组建。

 

二、M V C之间的交流模式

 

好了,现在我们来讨论MVC中各个元素之间的交流方式。

我们把程序分成三个部分,但并不希望他们完全独立,因为那样的话,我们的程序将毫无意义和功能而言。它们之间必然存在某种联系,使它们能有机的成为一个整体来实现各种强大的功能。而这种联系就是我们提到的交流方式。我们来看看下面的图,此图出自斯坦福大学CS193课程的课件。


图中有几条线把这三部分划分开,有黄线,虚线,和白色的实线。我们把它们想象成路标。你可以看到,在M和V之间有两条黄线,这表示什么呢?它意味着你不能穿越这黄线,任何一个方向都不行。在图的上部,你可以看到白色的虚线,它意味着你可以自由的穿越它,只要是安全的。那白色的实线呢?它代表你可以穿越,但你必须要买票,或者交点过路费。

 

好了,如果你觉得前面的比喻没有使你明白的话,让我们来讲点实在的东西。

 

首先, 我们来看C和M之间的绿色箭头,这箭头的方向就代表着“发起对话”的方向,也就是说,发起对话的是C,而做出回答的是M。C可以问M各种各样的问题,但M只是回答C的问题或要求,它不可以主动的向C要求什么。还记得虚线是畅通无阻的意思吧,所以,C知道M的所有的事情,如果用代码来说明这件事情,就是说,C可以导入M的头文件或是M的接口(API)。因为C可以通过M的API,所以它就可以肆无忌惮的向M要求这要求那了。

 

我们再来看看另外的一个绿色箭头,它是在C和V之间,和前一个绿色箭头的意义一样,它代表C可以直接地向V进行交流。你可以想想,C要把V放到屏幕上,并设置V的属性,告诉它们什么时候从屏幕上消失,把它们分成组等等。如果C不能自由的向V发号施令的话,程序的显示将会多么的困难,所以,C可以毫无限制地向V说话。

 

可能你已经注意到了,这个箭头上还有outlet(输出口),outlet可以看作是从C指向V的指针,它在C中被定义。outlet给我们提供了很大的方便,它使我们在C的内部就可以轻松准确地向V施令。C可以拥有很多的outlet,可以不止一个,这也使它可以更高效的和V进行交流。

 

那M和V之间可以交流么?还记得黄线的意思么?完全不可以通过,所以我们是不允许M和V进行交流的。这是因为我们不希望这三部分之间有过多的交流,你想想,假如V在显示时出现了问题,比如有一个图形没有显示出来,我们就要去查找错误,因为C可以和V交流,M也可以和V交流的话,我们就要去检查两个部分。相反的,只有C可以和V交流的话,在出错时,我们就只需要去C那里查找原因,这样查找错误不就很是简单了么?所以,我们不允许M和V之间有直接的联系,这也是在它们两之间有两根黄线的原因。

 

好的应用程序要具备与用户交互的能力。如果没有良好的交互性,程序的功能将会受到很大的限制。在MVC中,V是和用户直接接触的,用户看不到M和C,所以,程序与用户的交互必须通过V来实现,但V只是视图而已,它并不能完全处理用户的要求,所以,这就要求V必须有某种手段来向C发送信息,移交用户的交互要求。这手段就是前面白色实线代表的过路费,你知道V不能知道C的一切,但它可以通过某种“手段”来和C进行交流,移交用户交互责任。

 

我们接下来讨论V是如何向C发送信息的。V对C的交流有三种不同的方式。

 

第一种我们称为目标操作(target-action)。它是这样工作的,C会在自己的内部“悬挂”一个目标(target),如图中的红白相间的靶子,对应的,它还会分发一个操作(action,如图中的黄色箭头)给将要和它交流的视图对象(可能是屏幕上的一个按钮),当按钮被按时,action就会被发送给与之对应的target,这样V就可以和C交流了。但是在这种情况下,V只是知道发送action给对应的target,它并不知道C中的类,也不知道它到底发送了什么。target-action是我们经常使用的方法。

 

第二种方式我们叫做委托(delegate)。有时候,V需要和C进行同步,你知道,用户交互不仅仅是什么按按钮,划滑块,还有很多种形式。好了,让我们来看看图中的delegate黄色箭头,你发现箭头上又分出了四个小箭头:should,did,will,还有一个没标注的。绝大部分的delegate信息都是should,will,did这三种形式。和英文意思相对应,should代表视图对象将询问C中的某个对象“我应该这么做么?”,举个例子,有一个web视图,有人点击了一个链接,web视图就要问“我应该打开这个链接么?这样做安全么?”。这就是should信息。那will和did呢?will就是“我将要做这件事了”,did就是“我已经做了这件事”。C把自己设置为V的委托(delegate),它让V知道:如果V想知道更多的关于将如何显示的信息的话,就向C发送delegate信息。通过接受V发过来的delegate信息,C就会做出相应的协调和处理。还有一点,每个V只能有一个delegate。

 

第三种方式就是数据源(datasource),你知道,V不能拥有它所要显示的数据,记住这点非常重要。V希望别人帮助它管理将要显示的数据,当它需要数据时,它就会请求别人的帮助,把需要的数据给它。再者,iphone的屏幕很小,它不能显示包含大量信息的视图。看图中的datasource箭头,和delegate类似,V会发送cout,data at信息给C来请求数据。

 

好了,这就是V给C发送信息的三种形式。

 

最后一个问题。你看到M和C之间的白线,这意味着M不可以直接地,没有限制的对C进行交流。但有时,这个方向的交流是必要的。当M中的一些东西发生变化时,C需要了解这些变化,那我们怎么才能让C知道M的变化呢?通知(Notification)和KVO是解决问题的好方法。它们是这样工作的,当M中的某些东西发生变化时,他们会向C发出通知“嘿,老兄,注意了啊,我这发生变化了”,或者他们会发出指向变化的指针给C,或其他什么的。总之,他们的工作模式是这样的。

 

下面是我们的一个总结,cocoa忠实于MVC,所以理解cocoa的MVC是我们关键的开始,希望这些能使你明白一些。

 

C对M:API
C对V:Outlet
V对C:Target-action, Delegate,Datasource
M对C:Notification,KVO

转自:http://wangwenhao.net/2011/10/20/mvc-in-ios/


cocos2d-js-mvc:基于cocos2d-js的mvc框架,现已不再维护,目前更新的是基于cocos creator的游戏框架ituuz-x cocos2d-js-mvc cocos2d-js-mvc df 立即下载

相关推荐

一文读懂客户健康度

什么是客户健康度?客户健康度为什么重要?怎么计算客户健康度?这篇文章,我们来聊聊。

m0_62700043的博客 1419

iOS-- MVC模式

iOS-- MVC模式

weixin_61196797的博客 1970

灰度重心法实战:从原理到MATLAB代码实现激光条纹中心线提取

本文详细介绍了激光条纹中心线提取的核心方法——灰度重心法。通过物理类比阐释其原理,并提供从图像预处理到MATLAB代码实现的完整实战教程。文章重点解析了算法流程、关键参数调整及常见问题避坑指南,帮助读者快速掌握这一机器视觉与三维测量中的基础且高效的技术。

cake8的博客 461

iOS开发设计模式篇第一篇MVC设计模式

MVC(Model-View-Controller)是一种常见的软件设计模式,旨在将应用程序的逻辑、用户界面和输入进行分离。在iOS开发中,MVC帮助开发者组织代码,提高可维护性和可扩展性,使得项目结构更加清晰。本文将介绍MVC的基本概念、在iOS中的具体实现、优缺点、实践建议,以及其他常见的架构模式。

我叫柱子哥 2564

从 CDS 接口到 ABAP 运行时,深入理解 SAP RAP Custom Entity

CDS Custom Entity 是一种非 SQL、瞬态的 CDS 实体,不依赖 HANA SQL 读取数据,而是通过 ABAP 类实现查询逻辑(如 RFC、OData、BAPI 等)。它在 CDS 层定义数据契约(字段、键、关联、注解),由 @ObjectModel.query.implementedBy 指向实现 IF_RAP_QUERY_PROVIDER~SELECT 的类,真正执行数据获取。适用于无法用 SQL 表达的数据源,如远程系统或 API。其核心是“接口 + 实现”模式,运行时由 RAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 170

实测可复现|2026 Cloudflare盾v4.0反反爬全实战:从JS/WASM逆向到JA3指纹伪装,手把手突破拦截(附完整逆向代码+避坑手册)

本文以2026年Cloudflare盾v4.0(集成Shield Synapse v2.0)为核心,全程以实战复盘为视角,拆解了从JS/WASM混合逆向、全维度指纹伪装(JA3+浏览器指纹)、人类行为模拟,到代理池搭建的全流程,整合了完整可复现的代码,所有步骤和踩坑点均为实测所得,无任何AI套话,新手也能跟着复现,最终实现爬取成功率从12%提升至95%+。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1686

iOS里的MVC

我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型。我们将从两大方面来讨论MVC:   什么是MVC? M、V、C之间的交流方式是什么样子的? 理解了MVC的概念,对cocoa程序开发是至关重要的。   一、MVC的概念 MVC是Model-VIew-Controller,就是模型-视图-控制器,这些都是什么东西呢?

Heroic's blog 767

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

iOS—MVC

2、 Controller在接收到View传过来的交互事件(View就是完成让人和程序的交互的呀,比如按B1按钮)之后,经过一些判断和处理,把需要Model处理的事件递交给Model处理(比如刚才的例子中的保存到数据库),Controller对Model使用的是API;按照上面的原理,我们知道了M、V、C之间的各司其职——Model不保存控件,View不做数据库操作(但这个也不是绝对,如果需要View做一些数据缓存工作,还是需要保存一些临时数据的),而Controller就充当了两者之间的协调器、中转器。

weixin_61558111的博客 1064

STM32+ESP8266+MQTT协议连接阿里云物联网平台

一、环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。 开发软件:keil5 二、实现功能 通过阿里云物联网服务器实现设备数据远程上传、下发,实现数据交互。 在当前使用的开发板上有4盏LED灯、一个蜂鸣器、4个按键。 三、阿里云物联网服务器创建步骤 说明:如果没有账号的话,先点击网页右上角,注册一个账号,并完成实名认证再继续下一步。 产品名称根据自己情况填...

6万+

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

Python设计模式系列之一: 用模式改善软件设计(转载)

源地址:http://doc.chinaunix.net/python/200703/202199.shtml 本文详细介绍Python设计模式系列之一: 用模式改善软件设计   软件设计大师总是要比初学者更加清楚该如何设计软件,因为他们手中掌握着设计模式这一法宝。作为一种高级的软件复用形式,设计模式是众多优秀软件设计师集体智慧的结晶,能够很好地指导软件设计过程。本系列文章介...

weixin_34310369的博客 128

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 221

MVC软件设计架构模式

View 展示的数据来自 Model,但 View 不直接操作 Model,而是通过 Controller 间接获取。:开发人员可专注于某一层(如前端工程师做 View,后端工程师做 Model 和 Controller)。:一个 Model 可以被多个不同的 View 共用(如 Web 端和移动端共用同一套业务逻辑)。​ 是整个应用的纵向分层,范围更广。:在某些实现中,View 和 Controller 之间可能存在较强的依赖。,接收用户请求,调用 Model 处理,再返回结果给 View 展示。

2301_77574331的博客 871

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JSP开发模型

JSP开发模型 概念 JSP的开发模型即JSP Model,在Web开发中,为了更方便地使用JSP技术,Sun公司为JSP技术提供了两种开发模型:JSP Model1和JSP Model2。JSP Model1简单轻便,适合小型Web项目的快速开发;JSP Model2模型是在JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适用于多人合作开发的大型Web项目,实际开发过程中可以根据项目需求,选择合适的模型。 JSP Model1 采用JSP+JavaBean的技术,将页面显示和业务逻辑分开

m0_55680132的博客 693

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

什么是MVC?什么是MVVM?

什么是MVC? MVC全名是Model View Controller,是模型(model) 视图(view) 控制器(controller)的缩写,是一种软件设计典范。它开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器。 MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式 Model:常用javabean去实现,通过

weixin_52216977的博客 623

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MVC 笔 记

1

weixin_66109724的博客 91

MVC三层架构图解

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面

qq_43612371的博客 2710

Python设计模式系列之一: 用模式改善软件设计

一、什么是设计模式 设计模式(design pattern)的提出,是面向对象程序设计演化过程中的一个重要里程碑。正如Gamma,Helm,Johnson和Vlissides在他们的经典著作《设计模式》一书中所说的:设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。 设计模式的概念最早起源于建筑设计大师Christopher

筑梦★逐梦 798

MVC

MVC框架 百科名片    MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重

Better Thinker 587

MVC模式

MVC MVC不属于23种设计模式之一 来自后台的一种常见(主流)的软件设计模式 MVC的含义: Model View Controller 模型(M) - 视图(V) - 控制器© M 模型 数据模型(数据) V 视图 展示用户的界面(HTML) C 控制器 遥控器 发送指令 早期 前端是没有MVC概念 来自Java angularjs 1.x 第一次将MVC带入前端 ...

weixin_45752063的博客 356

MVC框架

百度百科:MVC全名是Model View Controller,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 MVC分为三部分,分别是: ●Model:模型,表示应用程序核心,比如数据记录列表 ●View:显示,对数据进行显示 ●Controller:控制器,对数据库的各种操作进行控制 MVC虽然分为三部分,但是MVC跟经典三层没有任何关系,

qq_73767908的博客 170

JavaScript学习笔记(二)(MVC思想)

JavaScript学习笔记(二)MVC思想MVC思维笔记:1.Model1(已淘汰,尽量别用):2.MVC:MVC解释Model(模型) :View(视图)Controller(控制)正常开发思维图相关面试题问题1:为什么要使用三层结构?(纯应届生)问题2 : MVC的优缺点(纯应届生)MVC设计原则:面向接口编程 MVC思想 在我们软件世界中,出现过各种各样编程思想(面向过程编程思想、面向对象编程思想、面向服务的编程思想),开发中也产生了各种各样的思想(MVC思想、MVVM思想等等),目的:为提高开发效

qq_47267252的博客 478

设计模式---MVC模式

MVC设计模式

追赶时代的博客 263

MVC 浅谈

只要接触MVC就势必离不开说三层,很多人就会一直纠结于他们之间的区别,也难怪,他们之间有共同之处:都分为三块,不仔细琢磨好像说的都是一样的东西,网上说法也是百家争鸣。本文仅是介绍一下对MVC的理解,由于学习是一个逐步深入的过程,现在还未到深刻理解的程度,也没必要非得区分出一个所以然来,也不敢对三层和MVC妄下评论,仅是记录这个学习认知的过程,希望和大家一同交流,随着时间的推移,自己的认识也...

wangminshe89 110
上一篇: C# - 重写比较
下一篇: Android - dip、dp、px、sp等单位说明
G机器猫
博客等级 码龄16年 106粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值