Cocoa MVC真的不是MVP吗?

Tho*_*ith 12 model-view-controller mvp cocoa design-patterns

再次,与MVC相关的问题.几天前,我开始阅读Apple的Cocoa Fundamentals Guide,其中Apple解释了他们对MVC的实现.

在作为复合设计模式(链接)的MVC一章中,他们比较了两个MVC版本:

  • 旧的/传统的SmallTalk版本: 在此输入图像描述

  • Apple目前定义的版本: 在此输入图像描述

他们将此当前模型描述如下:

此复合设计模式中的控制器对象包含Mediator模式以及策略模式; 它在两个方向上调节模型和视图对象之间的数据流.模型状态的变化通过 应用程序的控制器对象传递给视图对象.

传统模式看起来像MVC,没有错.但他们目前的模式名称让我感到困惑.据我所知,这可以看作是普通的MVP,因为Controller似乎总是在View和Model之间进行调解.

我完全错了,我是否误解了MVC或MVP?或者Apple只是使用了错误的名称?更重要的是,为什么这种模式称为MVC?

Mar*_*ein 11

你没错,但也不是Apple文档的作者.

MVC的历史现在漫长而复杂 - 尤其是因为许多系统提倡三方分离,实际上将控制器混淆到模型中或将控制器混合到视图中.从最早的Smalltalk实现开始,很明显将模型信息保留在视图之外是一件非常好的事情,并且这很容易实现.

另一方面,干净地分离控制器和视图的责任要简单得多.许多观点都希望被重用,比如按钮或文本字段.他们的控制器的可重用部分也希望被重用.但是你不要推文字或按B按钮; 许多按钮行为与视图紧密相关.同时,很难确定业务规则何时属于模型以及何时属于控制器.

此外,这个(非常好的)Apple文档试图捕捉一个哲学设计理念,而不是描述The One True Way.许多Cocoa控制器子系统看起来很像传统的MVC.传统的可可不再强调控制器,所以本文件实质上是在为(可重用的)视图和(可能可重用的)模型之间的介体提供一个位置.

许多Cocoa实现者更喜欢薄控制器,基本上用作外观以分离视图和模型.