我要问的问题是受我最近在 Flex 平台上的工作(以及一些假装实现 MVC 的框架)的启发,但我认为这足以让具有各种专业知识的人参与进来。
很长一段时间以来,我一直遵循由 Cairngorm 等框架提出的范式 -
视图,绑定到单例模型的属性,并调度事件。事件被前端控制器捕获,并因此执行命令。命令调用服务、获取数据并提供模型。模型通过绑定隐式更新视图。
在我得到以下数据结构之前,一切都很顺利:
用户有很多关注者(用户)关注很多用户有一堆照片关注很多位置
照片有很多喜欢的人(用户)有一个位置有一个创建者有很多相关的照片
位置有很多照片有很多追随者
同样,使用 Cairngorm 提出的想法也不是问题,例如拥有 currentUser、currentLocation 和 currentPhoto,然后绑定到它们。
问题出在视图本身。我有一系列复杂的“页面”视图,它们提供了可以想象的钻取信息。例如,位置页面显示最新/流行照片的网格、关注者面板以及基于拍摄这些照片的坐标的地图。问题来了:
显然,出于性能原因,我无法获取关注特定位置的所有用户,或者某个位置可能拥有的所有照片。我已经预取了一些,其他的将由服务器按需提供。
我想在同一视图上向下钻取,例如,当单击关注者的头像页面时,我应该得到该用户照片的一个小网格,或者某事。但我在模型中只有一个 currentUser。
这就引出了一个问题,为什么我什至需要绑定到中央单例模型?我不能把每个视图都变成一种响应者,即视图再次调度一个甚至,但是这次命令而不是提供模型,将直接提供调用视图。
不会有任何耦合,因为每个视图都会实现 IResponder。该命令将只需要一个 IResponder,它将从调用它的事件中获得。
在我看来,“模型”将扮演不同的角色。它将更像一个缓存,一个用于本地存储的全局字典,在向服务器发出请求之前将由命令检查。这样它可以节省一些对服务器的调用,但是,如果数据非常零星,这些相同的数据将与其他数据一起一次又一次地获取。(我可能在缓存中有一些用户数据,但通常我会调用服务器来收集关注者数据,无论我是否已经拥有一些数据,以保持一致性)
对这些想法的任何反馈将不胜感激