【发布时间】:2011-06-09 11:07:23
【问题描述】:
MVC 的幼稚实现会导致无限循环。
示例:Model 是带有 Worksheets 的 Workbook,View 是带有 Tabs 的 Tabbar
- 用户与 Tabbar 交互以创建新选项卡
- Tabbar 将事件 onTabAdded 发送到 Controler
- 控制器调用 Workbook.addWorksheet()
- 工作簿发送事件 onWorksheetAdded to Tabbar
- Tabbar 添加 Tab 并将 onTabAdded 发送到 Controler -> 2) 无限循环!
或者,可以通过编程方式启动循环 通过宏添加工作表。 或者,可以通过自动化 UI 测试以编程方式添加选项卡。
似乎你拥有的组件越多,耦合就越松 (被认为是好的设计),越有可能出现无限循环。
你知道如何避免这种无限循环的实现模式吗? 评估此类模式的优缺点?
我特别感兴趣的是富 JavaScript 客户端的解决方案。
以下问题的答案并不是真正的实现 等级:
【问题讨论】:
-
我不明白为什么当使用更新的模型将页面刷新为“onTabAdded”显然是响应用户交互时,您的“标签栏”会引发“onTabAdded”事件,而不是显示刷新。我认为您不了解如何使用 MVC 模式,我会花一些时间来看看一些实现。
-
@Lazarus:好吧,也许你可以解释一下我的示例可以如何修改以避免循环,可能通过遵守 MVC。
-
@amadeus :视图有一个按钮,当单击时,该按钮会触发控制器中的命令以添加新的选项卡/工作表。该命令相应地修改模型并指示控制器呈现相同的视图,但使用新修改的模型。视图像以前一样呈现模型(现在包括 n+1 个选项卡)。由于它是一个视图,因此不会从标签栏发送其他消息,它只显示您给它的内容。你的模型过于复杂了。
-
@Lazarus:所以在您的解决方案中,视图不是增量的,因为它总是对模型进行完全重新渲染。在上面的例子中(标签不多),这可能是最好的解决方案。
-
@Lazarus 和第一条评论:在 UI 交互和 API 调用之后,onTabAdded 应该始终触发。 Tabbar 不知道谁在听。
标签: javascript design-patterns architecture