Apple的Cocoa框架的设计模式:MVC,MVP,被动视图...... Apple在哪里?

12 cocoa design-patterns

为了为这个问题奠定基础,我将说明我从以下方面获得了MVC,MVP和被动视图的定义:

模型视图控制器(MVC)
模型视图演示器(MVP)
被动视图(PV)

Apple一直声称它使用MVC设计模式,但我注意到在OS X 10.5中我们已经获得了NSViewController,KVO,绑定等等,这些对象看起来更像是被动视图设计模式.这是苹果希望我们前往的地方吗?我希望以尽可能与Apple选择的设计模式一致的方式规划我的代码,这就是为什么我想知道Apple的目标.有人有线索吗?

jac*_*ckr 7

任何复杂的代码都有许多可能适用不同模式的地方.MVC在Cocoa文档中非常突出,因为它解释了您的功能代码(模型),UI代码或IB设计(视图)与将它们连接在一起的Cocoa服务(控制器)之间的关系.这是值得强调的,特别是在介绍性的dox中,因为你需要一点"警醒"来停止认为你必须自己编写它,并开始考虑如何设计你的独特部分,并相信框架来做它管道工作.

MVC的变体定义具有传奇色彩,值得指出的是MVC没有在规范的"四人帮"一书"设计模式"中描述.同样值得承认的是,Cocoa的"MVC"模型与SmallTalk 80 MVC(术语所源自的地方)并不相同.

值得指出的是,"GoF"实际上使用"模式"一词来表示特定的文档样式,而不是设计模式所描述的代码的抽象方式.太糟糕了,这种用法已经大部分丢失了.如果我们都这样理解这个词,那么我可以说"如果有人真的为Cocoa的MVC编写一个模式,那将会非常有用." 然后我们不会都这么困惑!


Mar*_*eau 3

我不会说 Cocoa 遵循那里描述的被动视图模式。这意味着控制器完成了准备视图和发送更改通知的所有工作。在 Cocoa 中,视图对象通常会响应来自模型的 KVO 通知(通过绑定),刷新其绑定到的控制器中的数据,通过数据格式化程序或值转换器准备数据,最后将其显示在屏幕上。

Cocoa 很好地遵循了 MVC,尽管“控制器”方面通常分为视图控制器和模型控制器。您可以在此处阅读有关此内容的更多信息。如果您有任何关于您感到困惑的具体示例,也许我可以提供有关 Cocoa 工作方式的更多详细信息。

在同一指南中,本节介绍了一些您可能会觉得有用的其他设计模式。根据我自己的经验,尽管在完成了几个项目后,Cocoa 中的 MVC 往往会很自然地出现,但我不会太担心它。