【问题标题】:MVC novice: are triad wrappers good/bad design?MVC 新手:triad 包装器是好还是坏设计?
【发布时间】:2025-12-21 04:15:12
【问题描述】:

在学术上,我熟悉 MVC 范式,但实际上,我还是个新手。我正在实现我的第一个“真正的”MVC 应用(AS3 中的视频播放器)。

我正在创建一个播放列表(作为视频播放器的侧边栏)。播放列表是可滚动的,当您将鼠标悬停在某个项目上时,它会补间(展开)以显示更多信息。没什么神奇的。

现在,将有数十个播放列表项。我想知道如何在这里管理实际的 M、V 和 C。

所以,对于每个播放列表项,我都有一个 ItemModel、ItemView 和 ItemController 的实例。当我想在播放列表中添加一个新项目时,我是否应该手动实例化一个新的 ItemModel、ItemView 和 ItemController,将它们全部链接起来,将它们放在需要去的地方,然后 [可选地] 保留对它们的引用?

我想的是创建一个 Item 类,它只是 MVC 三元组的简单包装器。然后,与三元组的任何客户端交互都必须由包装器委托。在这种情况下,Item“包装器”负责

  1. 实例化 MVC 三元组
  2. 将事件委托给视图。

这合理吗?可扩展?典型的?是反模式吗?

在具有更多对象的更大系统中,我可以看到自己采用“MVCW”的范例(“W”是每个三元组的包装器),所以有 4 个类,形式为 XyzModel、XyzView、XyzController、和 Xyz(或 XyzWrapper,或 XyzObject,或其他)。

但是……这并不是我以前读过的东西。而且我知道一个给定的模型可以有多个视图,那么这将如何发挥作用呢?

所有这一切的动机是,为我需要的每个新“事物”手动创建 3 个新对象似乎有点愚蠢(尤其是在客户端交互非常少的情况下)。我怀疑这只是我对 MVC 范式的理解中的一个失误,并且在更正后,我不仅会理解为什么“包装器”是一个坏主意,而且会理解如何更好地管理实际对象三合会。

也许,我的设计方法完全错误,这就是我困惑的根本原因。

或者,也许这是一个特殊情况,是的,实际上每个列表项制造 3 个实例正确的过程。

有什么建议吗?

【问题讨论】:

  • 为什么要为每个实体创建 3 个类?模型实体、控制器和视图不是完全不同的事物相互交流吗?
  • 不是每个条目三个类 - 每个实体三个 实例。一个模型、一个视图和一个控制器。

标签: model-view-controller design-patterns


【解决方案1】:

事实证明,我对何时何地使用模型、视图和控制器的理解有点缺陷。例如,我最后只使用了 ItemView 和 ItemModel - 所有这些都由 PlaylistController 的单个实例处理。

似乎为(并且仅用于)单个 UI 组件实例化完整三元组的情况可能不太可能 - 如果它确实发生,那么它更简洁(并且向前兼容)简单直接制造相关的对象。

【讨论】: