gpt4 book ai didi

cocoa - Cocoa MVC 真的不是 MVP 吗?

转载 作者:行者123 更新时间:2023-12-03 16:03:45 27 4
gpt4 key购买 nike

又是一个MVC相关的问题。几天前,我开始阅读 Apple 的 Cocoa 基础指南,其中 Apple 解释了他们的 MVC 实现。

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

  • 旧/传统的 SmallTalk 版本: enter image description here

  • 当前 Apple 定义的版本: enter image description here

他们对当前模型的描述如下:

The controller object in this compound design pattern incorporates the Mediator pattern as well as the Strategy pattern; it mediates the flow of data between model and view objects in both directions. Changes in model state are communicated to view objects through the controller objects of an application.

传统的模式看起来像MVC,没有什么问题。但他们当前模式的名称让我感到困惑。据我所知,这可以被视为简单的 MVP因为 Controller 似乎总是在 View 和模型之间进行调解。

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

最佳答案

你没有错,Apple 文档的作者也没有错。

MVC 的历史悠久而复杂——尤其是因为许多系统提倡三方分离,这实际上将 Controller 混入模型中或将 Controller 混合到 View 中。从最早期的 Smalltalk 实现来看,很明显,将模型信息隐藏在 View 之外是一件非常好的事情,而且这很容易做到。

另一方面,清楚地分离 Controller 和 View 的职责则要困难得多。许多 View 都需要重用,例如按钮或文本字段。他们的 Controller 的可重用部分也希望被重用。但您不是按下文本字段或粗体按钮;而是按下按钮。许多按钮行为与 View 密切相关。同时,很难确定业务规则何时属于模型以及何时属于 Controller 。

此外,这份(非常好的)Apple 文档试图捕捉一种哲学设计理念,而不是描述 The One True Way。许多 Cocoa Controller 子系统看起来很像传统的 MVC。传统的 cocoa 不再强调 Controller ,因此本文档本质上是主张让它们作为(可重用) View 和(可能可重用)模型之间的中介者。

许多 Cocoa 实现者更喜欢瘦 Controller ,本质上是作为分离 View 和模型的外观。

关于cocoa - Cocoa MVC 真的不是 MVP 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com