1

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

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

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

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

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

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

4

2 回答 2

2

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

希望它能澄清你的困惑。

于 2012-09-12T11:32:35.627 回答
0

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

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

关键是视图从不拥有自己的数据,它只是显示它。CS193P 中的第 1 课有很多很好的插图,并在此处下载了 pdf 格式的讲座

此外,虽然视图不应该拥有自己的数据,其中数据完全来自视图中的内容(例如视图中的框,其大小来自接收的数据量),但可以使用该框大小当它自己绘制时,由视图出来。

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

于 2012-09-12T13:48:23.470 回答