0

我要问的问题是受我最近在 Flex 平台上的工作(以及一些假装实现 MVC 的框架)的启发,但我认为这足以让具有各种专业知识的人参与进来。

很长一段时间以来,我一直遵循由 Cairngorm 等框架提出的范式 -

视图,绑定到单例模型的属性,并调度事件。事件被前端控制器捕获,并因此执行命令。命令调用服务、获取数据并提供模型。模型通过绑定隐式更新视图。

在我得到以下数据结构之前,一切都很顺利:

用户有很多关注者(用户)关注很多用户有一堆照片关注很多位置

照片有很多喜欢的人(用户)有一个位置有一个创建者有很多相关的照片

位置有很多照片有很多追随者

同样,使用 Cairngorm 提出的想法也不是问题,例如拥有 currentUser、currentLocation 和 currentPhoto,然后绑定到它们。

问题出在视图本身。我有一系列复杂的“页面”视图,它们提供了可以想象的钻取信息。例如,位置页面显示最新/流行照片的网格、关注者面板以及基于拍摄这些照片的坐标的地图。问题来了:

显然,出于性能原因,我无法获取关注特定位置的所有用户,或者某个位置可能拥有的所有照片。我已经预取了一些,其他的将由服务器按需提供。

我想在同一视图上向下钻取,例如,当单击关注者的头像页面时,我应该得到该用户照片的一个小网格,或者某事。但我在模型中只有一个 currentUser。

这就引出了一个问题,为什么我什至需要绑定到中央单例模型?我不能把每个视图都变成一种响应者,即视图再次调度一个甚至,但是这次命令而不是提供模型,将直接提供调用视图。

不会有任何耦合,因为每个视图都会实现 IResponder。该命令将只需要一个 IResponder,它将从调用它的事件中获得。

在我看来,“模型”将扮演不同的角色。它将更像一个缓存,一个用于本地存储的全局字典,在向服务器发出请求之前将由命令检查。这样它可以节省一些对服务器的调用,但是,如果数据非常零星,这些相同的数据将与其他数据一起一次又一次地获取。(我可能在缓存中有一些用户数据,但通常我会调用服务器来收集关注者数据,无论我是否已经拥有一些数据,以保持一致性)

对这些想法的任何反馈将不胜感激

4

2 回答 2

1

我认为您的实际问题是:

这就引出了一个问题,为什么我什至需要绑定到中央单例模型?

您不需要绑定到中央单例模型。事实上,许多人声称这种方法很糟糕,会导致性能问题。绑定可能是一项昂贵的操作,因此将所有可绑定值放在一个位置可能会在您的应用程序中产生连锁反应。

Cairngorm 似乎将你推向这个方向的事实是对 Cairngorm 的普遍批评。在 Cairngorm 的辩护中,我认为没有任何理由——在 Cairngorm 架构中——如果你愿意,你不能拥有多个“全局数据单例”。首先,我将避免重复反对 Singletons 的论点。

大多数后Cairngorm 框架可以被视为对Cairngorm 的回应,并尝试以不同的方式做事。

于 2011-06-16T21:14:48.897 回答
1

这不是一个真正的答案,因为这个问题并不是一个真正的问题。但是,如果您想查看“MVC”,则应该远离Cairngorm,因为它可能实现了所有 Flex 应用程序框架中最糟糕的 MVC 模式。最好的例子之一(或者最坏的例子,取决于你如何看待它)是他们使用Theo 已经在博客中提到的单例模型。

您应该查看RobotLegsParsley以获得正确的 MVC 架构。在我个人对架构的看法中,“模型”只是“数据”的另一种说法。它只是一个为您的应用程序保存数据或状态的类。

于 2011-06-16T21:17:05.237 回答