【问题标题】:MVC - should the model be a different class from the controller?MVC - 模型应该是与控制器不同的类吗?
【发布时间】:2012-09-12 11:17:07
【问题描述】:

我正在学习 cocoa(不是 ios),我想在我创建的所有代码中理解和实现 MVC。我已经学习并理解了这种设计的逻辑,我正在尝试在我的应用程序中使用它(课程和教程等非常小的应用程序)。

大多数教程仅在 2 个文件中显示 MVC 示例。模型和 appController 一起在一个类/文件(NSObject 的子类)中,然后视图显然在其自己的文件(NSView)中。 但是当我想到 MVC 时,我总是想到 3 个文件中的 3 个类:

类/文件 1. 模型 例如姓名、人物、年龄、数组等。 类/文件 2. appController - 大脑,例如给人一个名字和年龄等… 类/文件 3. 视图,例如在窗口中显示此人。

那么模型是否应该始终位于与控制器不同的文件中?

另一个问题是关于通信的——在上面的例子中,Model 和 appController 将如何共享数据?模型会是 appController 的子类(appController 是 NSObject 的子类),所以两者都可以共享 ivars 吗??

感谢您阅读本文,希望您能消除我的困惑。

【问题讨论】:

    标签: ios xcode cocoa xcode4


    【解决方案1】:

    您对模型是正确的,这些可能是抽象数据类型,例如人物、新闻等。您可以说您的业务对象构成了您的模型。视图是您如何表示数据的方式,例如我必须在 tableViewCell 中显示一个新闻项目,我将创建一个包含该新闻的标题、日期和时间的视图。但是这个视图不会直接与模型通信来获取数据。 在这里,您的控制器(您称为大脑)进来了。您的控制器知道要显示此视图。在这种情况下,您的控制器具有模型对象 news 对象。 所以它会将模型对象中的数据提供给视图以填充视图。所以这是第二个问题的答案,您不需要将模型作为应用控制器的子类。但是您的控制器具有模型的对象。该对象处于使用的最后阶段。 所以关键点是: 模型与控制器分开,并查看两者。 视图和模型不直接通信。 控制器作为视图和模型之间的通信来源。 model 不是 appcontroller 的子类。 您的控制器可能必须对对象进行建模才能使用它。

    希望它能澄清你的困惑。

    【讨论】:

    • @Ehsan- 谢谢 Ehsan - 我非常感谢您在这方面的时间。所以有几个问题:关于控制器和模型之间的通信,我仍然有点困惑。当你说,控制器在它的最后阶段有一个模型的对象。你是说我应该在我的 appController 中创建模型的实例/对象吗?如果是,我想如果我从 appController 中的模型类创建一个对象,我可以获得模型的属性(数组等),但不能获得实际值(字符串名称等)!该死……当我写这篇文章时,我意识到我是多么的困惑!
    • 混乱排序!我忘记了,如果我在模型的实现文件中用init方法初始化我的值,当我将模型导入appController时,所有的值都可以导入。
    【解决方案2】:

    确实,Model 比 View 和 ViewController 更抽象。

    Model 可能是一个类,但如果它是一个简单的模型,(比如 ViewController 可以从其他 ViewController 获取的单个值)它可能只是在 ViewController 中。

    关键是视图从不拥有自己的数据,它只是显示它。 CS193P第1讲有很多很好的插图,有pdf格式的讲义下载here

    此外,尽管视图不应该拥有自己的数据,其中数据完全来自视图中的内容(例如视图中的框,其大小来自接收的数据量),但该框的大小可以在 View 自己绘制的时候计算出来。

    此外,还有一个本讲座提到的计算器示例here。 我在这些地方学到了很多关于这些概念的知识。我现在只是在语法上挣扎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2011-11-07
      相关资源
      最近更新 更多