【问题标题】:MVC in Cocoa TouchCocoa Touch 中的 MVC
【发布时间】:2011-06-07 04:45:26
【问题描述】:

我无法理解是否在 iPhone 应用程序中正确实现了 MVC 模式。在我的应用程序中,我有视图、视图控制器和模型。视图控制器管理接口,导航到其他视图控制器,设置变量到其他视图控制器和模型,并与模型通信。但是这样,我是否正确地遵循了 MVC 模式?我不会错过模型控制器吗?

另一个问题:我有一个用户模型,我需要在几乎所有模型和一些控制器中都可以访问它。将其定义为 appDelegate 中的变量是否正确?我一直在读到这是一种不好的做法,但我不明白为什么在这种情况下。

【问题讨论】:

    标签: iphone cocoa-touch model-view-controller


    【解决方案1】:

    全局对象

    所有重要的代码都有错误,如果您使用哑全局对象,它们就更难跟踪。 “哑”是指来自 API 的通用对象,它们缺少单点访问,以防您需要记录、验证、key-value observe 和通知更改。您可以将全局对象包装在一个类中,以通过您自己的访问器路由所有内容。

    有人说使用全局变量会让你养成一个坏习惯。其他人说这取决于代码的大小,因为这是开发速度和复杂性之间的权衡。

    appdelegate 是一个 Singleton,所以这个讨论是相关的:What is so bad about singletons?Singletons: good design or a crutch?

    MVC

    Apple 在Cocoa Core CompetenciesCocoa Fundamentals Guide 中谈到了它。

    可以合并 MVC 所扮演的角色 一个对象,制造一个对象,为 例如,同时满足控制器 并查看角色——在这种情况下,它会 被称为视图控制器。在里面 同样的,你也可以拥有 模型控制器对象。对于一些 应用程序,结合角色,如 这是一个可以接受的设计。

    您的设计是否复杂到需要模型控制器?无论您的决定是什么,承受后果都会教给您很多东西。 :)

    【讨论】:

      【解决方案2】:

      一种设计模式,其中模型(程序中的任何数据)、视图(用户看到的内容)和控制器(处理视图和模型之间所有交互的层)以如下方式分离:修改程序的视图或模型组件对彼此没有影响。

      目的:

      目的是稍后您可能需要更改您的程序视图,并且通过在这方面进行编程,您将不必修改您的程序模型。例如,Apple 推出了一款 iPad,其视图的编程方式与 iPhone 有所不同,但您希望

      现在我在制作上面的视频后收到了一些消息,一些人感谢我让 MVC 的概念听起来如此简单,还有一些人告诉我我把他们弄糊涂了,想知道我怎么能理解这些东西。

      好吧,别担心。我已经看到了关于应该在模型、视图或控制器中分类哪些组件的争论,我什至看到了成功的“大师作者”混乱在解释什么去哪里时,请记住这里的关键思想是您可以修改其中一个关键区域而不会完全破坏程序的另一个关键区域,并将咆哮留给喜欢争论的想要的编码人员究竟什么适合什么首字母缩写词,而 MVC 通常是他们的目标。

      【讨论】:

      • 感谢您的澄清。我的困惑是,在视图控制器中,我同时管理界面(例如填写表格视图)并处理视图和模型之间的交互。这是正确的还是我在 1 中混合了 2 个概念?顺便说一句,您在回答中提到您制作了一个关于 MVC 的视频。可以发一下链接吗?
      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多