gpt4 book ai didi

javascript - 如何实现 Javascript 中介(发布-订阅)模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:38 25 4
gpt4 key购买 nike

背景

我们有一个相当复杂的 Silverlight 客户端,我们正在用 HTML/Javascript/CSS 重写它,构建在相同的 Web 服务之上。实际上,我们正在移植两个 Silverlight 不同的客户端,它们共享一些共同的功能。

我阅读了关于 http://addyosmani.com/largescalejavascript/ 的文章并计划使用建议的体系结构,尤其是调解器模式。

Addy 描述的 10000 英尺模式概览:

  • 代码被分成小模块
  • 模块只知道中介对象;模块不能直接与其他模块通信
  • 中介者有一个简单的界面来发布和订阅消息
  • 模块可以订阅消息(通过mediator API),给出一个回调函数
  • 模块可以通过参数对象向中介者发布消息,中介者调用任何订阅消息的模块的回调方法,传递参数对象

这里的主要目标之一是实现模块之间的松散耦合。所以我们可以重用两个客户端中的模块。并单独测试模块。中介应该是我们唯一需要的全局对象,这必须是好的。

虽然我喜欢这个想法,但我觉得在某些情况下它过于复杂,而且我的一些团队成员不会被说服。让我举例说明:

假设我们有一个执行计算的辅助函数——假设它格式化一个字符串——并假设这个函数应该对任何模块可用。此功能可以属于“工具”或“助手”模块,然后可重用和测试。

要从任意模块调用此函数,我必须发布一条消息,例如 formatString 并将我的输入字符串作为参数。辅助函数已订阅 formatString 消息。但在我发布 formatString 消息之前,我首先必须订阅一条消息,如 formatStringResult,带有回调函数可以收到结果。然后,一旦我得到结果,我就取消订阅 formatStringResult 消息。

问题

  • 中介是否应该直接在其自己的界面中提供此类帮助程序功能?
  • 或者我应该扩展发布接口(interface)以允许可选的结果参数,辅助方法可以在其中直接写入结果吗?
  • 拥有一个额外的中介层是否真的值得实现松耦合的好处?

我非常感谢在“复杂”JavaScript 应用程序中实现松散耦合经验的开发人员的建议。

最佳答案

您实际上完美地描述了BarFoos 应用程序框架:

https://github.com/jAndreas/BarFoos

关于javascript - 如何实现 Javascript 中介(发布-订阅)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809617/

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