MVC - 模型应该与控制器不同吗?

时间:2012-09-12 11:17:08

标签: ios xcode cocoa xcode4

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

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

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

那么模型应该始终与控制器位于一个单独的文件中吗?

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

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

2 个答案:

答案 0 :(得分:2)

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

希望它能澄清你的困惑。

答案 1 :(得分:0)

Model确实比View和ViewController更抽象。

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

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

此外,虽然视图永远不应拥有自己的数据,但该数据完全来自视图中的内容(视图中的框,例如其大小来自接收的数据量),该框大小当它正在绘制时,可以通过View来解决。

此外,本讲座中还有一个计算器示例here。 我在这些地方学到了很多关于概念的知识。我现在正在努力学习语法。