Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MVC和委托

MVC和委托
EN

Software Engineering用户
提问于 2012-10-14 13:27:05
回答 2查看 5K关注 0票数 7

我是一个入门的iOS程序员,使用模型作为设计模式:我的模型对我的视图一无所知(为了使它与任何视图兼容),我的视图不了解我的模型,所以它们通过我的控制器进行交互。视图与控制器交互的一种非常常见的方式是通过委托:当用户与应用程序交互时,我的视图将通知我的控制器,它可以调用我的模型的一些方法,并在必要时更新我的视图。

然而,让我的控制器成为我的模型的代表是否有意义呢?我不相信这是一条路。例如,如果我的模型没有足够的信息来完成任务,那么可以方便地通知我的控制器某个进程正在完成,或者要求用户提供额外的输入。但是,这样做的缺点是,我的控制器将既是我的控制器又是我的模型的委托,因此没有一种真正正确的方法来通知我的模型在我的视图中发生的变化,反之亦然。(如果我错了,请纠正我。)

结论:我不认为让我的控制器作为我的模型的代表是个好主意,但只是作为我的观点的代表是好的。这是大多数MVC模型处理的方式吗?或者,是否有一种方法让控制器既是控制器又是模型的委托,并在它们之间进行适当的通信?

就像我说的,我是个初学者,所以我想要立即做正确的事情,而不是花很多时间在那些无论如何都行不通的模型上。:)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2012-10-14 15:35:46

我将特别介绍iOS,因为它有自己的概念和一些语言特性,这使得它的处理方法非常合适。在iOS中,控制器模型层的交互通常基于观察者模式的一些变体(键值观察(KVO),也包括NSNotification)。我发现模型层经常不像视图-控制器层接口那样来回进行交互(考虑动态的、功能齐全的表视图的复杂性),所以委托并不是最适合的。通常情况下(用户输入、网络请求等)会改变模型,控制器相应地通过更新视图来响应。但委托仍然用于长期运行的动态交互,例如显示频繁更新数据集内容的表视图(请参见NSFetchedResultsController)。

至于让控制器作为视图和模型的委托的问题,除了会降低控制器的内聚力外,没有其他固有的问题,有时将控制器层划分为视图控制器和数据控制器是一个很好的选择。使用KVO或NSNotification来观察模型层中的更改通常是非常简单的,因此您不会发现迫切需要提取一个新类。

票数 4
EN

Software Engineering用户

发布于 2012-10-14 20:50:24

当您谈到与iOS有关的控制器时,您通常是在谈论视图控制器--即用来管理视图层次结构的对象。iOS应用程序中的每个“屏幕”都有自己的视图控制器,当用户浏览应用程序时,这些控制器就会来来去去。

另一方面,模型是一个对象或对象图,它表示应用程序所操作的数据,而不是仅仅因为用户在应用程序中移动而改变。

如果要使用视图控制器作为模型的委托,则需要使用与模型的生存期相似的视图控制器。在基于导航的应用程序中,这通常意味着根视图控制器,它通常是首先创建模型的对象。(另一个候选对象是应用程序委托,它是另一个长期存在的对象,有时会创建模型。)

视图控制器没有理由不能成为一个或多个视图以及模型的委托。只是要仔细考虑上面描述的生命周期问题。另外,考虑您的模型是否真的需要委托,以及委托是否是传递模型可能需要发送的任何消息的正确方式。其他选项包括KVO和通知。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/169859

复制
相关文章
事件委托和this
  事件的第一个阶段是捕获阶段。事件从文档的根节点流向目标对象节点。途中经过各个层次的DOM节点,并在各节点上触发捕获事件,直到到达事件的目标节点。捕获阶段的主要任务是建立传播路径,在冒泡阶段,事件会通过这个路径回溯到文档跟节点。
超然
2018/08/03
8150
委托和事件
我们继续思考上面的程序:上面的三个方法都定义在Programe类中,这样做是为了理解的方便,实际应用中,通常都是 GreetPeople 在一个类中,ChineseGreeting和 EnglishGreeting 在另外的类中。现在你已经对委托有了初步了解,是时候对上面的例子做个改进了。假设我们将GreetingPeople()放在一个叫GreetingManager的类中,那么新程序应该是这个样子的:
javascript.shop
2019/09/04
6650
C#委托和事件
         通常,一个C语言学习者登堂入室的标志就是学会使用了指针,而成为高手的标志又是“玩转指针”。指针是如此奇妙,通过一个地址,可以指向一个数,结构体,对象,甚至函数。最后的一种函数,我们称之为“函数指针”(和“指针函数”可不一样!)就像如下的代码:
yaphetsfang
2020/07/30
7920
C#委托和事件
c#之委托和事件
一:委托简介 委托是一种指针,保持方法的引用 委托使得方法可以作为参数进行传递 如:
liulun
2022/05/09
2500
c#之委托和事件
C#----委托和事件(一)
最近在做的项目,正在进行重构,之前的框架就是纯三层的简单调用,外加一些Session,SQLHelper等封装管理类,其他的东西,一直也想去抽象,但是奈何能力还有所欠缺,抽象出来的东西,被组长狠狠的给鄙视了一番,最近在组长的带领下,重新搭建框架,整个过程下来,真的是被狠狠的打击了,也真是服了我们组长了,太牛了,看来自己欠缺的还是很多很多。具体的框架,后期熟悉了在给大家介绍,现在还是有点懵懵哒。 在跟组长交流的时候,组长说让我们多用委托,在之前做项目的时候貌似用到过,不过印象不大,在狠狠的恶补下C#的一些知识点!在网上查了一些关于委托和事件的资料,委托和事件在.Net Framework中的应用还是非常广泛的,有的人说,对于接触C#时间不长的人来说较好的理解委托和事件并不容易,它们一道门槛儿,过了这个槛儿的人,觉得真是太容易了,而没有走过这道门槛的人,每次见到委托和就觉得心里特别的别的慌,浑身不自在。确实是,不过学什么也都是这个理,你得懂得去坚持,主动的多想,多总结,有付出才会有回报!
令仔很忙
2018/09/14
1.5K0
Kotlin的委托属性和区间
委托属性 委托属性 是一种通过委托实现拥有 getter 和可选 setter 的 属性,并允许实现可复用的自定义属性。例如: class Example { var p: String by Delegate() } 委托对象必须实现一个拥有 getValue() 方法的操作符,以及 setValue() 方法来实现读/写属性。些方法将会接受包含对象实例以及属性元数据作为额外参数。当一个类声明委托属性时,编译器生成的代码会和如下 Java 代码相似。 public final class Exam
xiangzhihong
2018/02/06
1.4K0
JavaScript事件代理和委托(Delegation)
首先介绍一下JavaScript的事件代理。事件代理在JS世界中一个非常有用也很有趣的功能。当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委托给父节点来触发处理函数。这主要得益于浏览器的事件冒泡机制。
小蔚
2019/09/11
6050
MVC和MVVC
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说MVC和MVVC,希望能够帮助大家进步!!!
Java架构师必看
2022/01/11
1.4K0
MVC和MVVC
【c#】Func委托、Action委托
1.Func委托必须要求所接收的方法有一个返回值 2.Action委托接受一个没有返回值的方法 应用:在跨线程访问可视化控件的时候经常使用
MaybeHC
2024/04/23
1410
【c#】Func委托、Action委托
MVC和MVT
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。(百度百科)
zy010101
2021/09/28
5180
C# 委托一(委托基础)
委托可以这样来理解:它是一种数据类型,和引用类型类似,不过和一般的类相比,委托的实例不是在堆中的数据,而是一个方法。委托类似于引用类型,和C++中的函数指针很相似,但是不同之处就在于,它不是存在于堆中的。正是有了委托我们才得以将函数打包成一个变量进行传递。这就是说,我们不止能够将数据作为参数传递,还可以将一个函数作为参数进行传递,这样就可以在需要的时候方便的进行控制的反转(Ioc,控制反转)。
aehyok
2018/09/11
6410
C# 委托一(委托基础)
C#委托进阶,事件和委托,一次就看明白,附源码
需求背景    猫叫触发一系列的动作或者说触发一系列事件,猫叫导致狗叫,小孩哭,Mom跑。 代码结构申明 1 /// <summary> 2 /// 接口类 3 /// </summary> 4 public interface IObeject 5 { 6 /// <summary> 7 /// 提供该方法执行一系列继承自该接口的类行为 8 /// </summary> 9 void
指尖改变世界
2020/07/21
1.1K0
C# 中的委托和事件
文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续)
Edison Zhou
2018/08/20
8980
C# 中的委托和事件
JavaScript面试问题:事件委托和this
JavaScript不仅门槛低,而且是一门有趣、功能强大和非常重要的语言。各行各业的人发现自己最混乱的选择是JavaSscript编程语言。由于有着各种各样的背景,所以不是每个人都对JavaScript及其基本原理有广泛的认识。通常来书,除非你去参加工作面试才会去思考为什么或者怎么做,否则JavaScript只是你工作的内容。 这个系类的目标是深入探讨JavaScript的一些概念和理论。主题来自于 Darcy Clarke的JavaScript典型面试问题列表。希望你不仅仅是为了答案而阅读完这篇文章,每一
前朝楚水
2018/04/02
1.3K0
事件委托
由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理。
用户8870853
2021/07/27
8850
委托与事件-委托详解(一)
  说起委托和事件,我就想起了再学校的时候,当时死记硬背去记什么是委托什么是事件。记得当时蝼某人问我,委托是什么?但是只知道一点点,就跟他说:打个比方,我要喝水,但是我不去买,我委托你去帮我买水。这就是委托,够直白简单了吧。
小世界的野孩子
2019/07/30
1.2K0
C#委托二(委托类型)
既然叫做委托类型,就说明MyDelegate实际上是一个类,上面的写法只是一种简单的缩略写法,实际上,我们自己定义的委托,都是继承自System.MulticastDelegate类的.
aehyok
2018/09/11
4390
C#委托二(委托类型)
事件与委托的区别就是“+=”和“-="?
事件的作用与委托变量一样,只是功能上比委托变量有更多的限制。(比如:1.只能通过+=或 -= 来绑定方法(事件处理程序)2.只能在类内部调用(触发)事件。)
静心物语313
2020/03/24
1.3K0
事件与委托的区别就是“+=”和“-="?
委托与事件-委托事件案例(三)
  这两天一直在想如何结合实际案例来结束委托与事件的讲解,下面讲解两个事例,用来加深对委托及事件的理解。
小世界的野孩子
2019/07/30
8770
浅谈 MVC 和 MTV
今天小婷儿给大家分享的是浅谈 MVC 和 MTV。 浅谈 MVC 和 MTV 一、MVC M:model,模型,就是数据模型,负责数据的存取; V:view,视图,负责页面的展示逻辑; C:contr
AiDBA宝典
2019/09/29
5720
浅谈 MVC 和 MTV

相似问题

委托模式:委托还是代理?

10

用于委托模式的函数和类

10

Rails: Demeter委托和法律的有用示例

10

委托、继承和依赖注入的设计问题

20

权限和MVC

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文