背景
我们有一个相当复杂的Silverlight客户端,我们在HTML / Javascript / CSS中重写,构建在相同的Web服务之上。实际上我们有两个Silverlight不同的客户端,我们正在移植它们,它们共享一些共同的功能。
我阅读http://addyosmani.com/largescalejavascript/上的文章,并计划使用建议的架构,特别是中介模式。
Addy所描述的模式的10000英尺概述:
这里的主要目标之一是实现模块之间的松散耦合。所以我们可以在两个客户端中重用这些模块。并单独测试模块。调解员应该是我们需要的唯一全球性对象,这必须是好的。
但是虽然我喜欢这个想法,但我觉得在某些情况下它过于复杂,并且我的一些团队成员不会被说服。让我举例说明:
假设我们有一个执行计算的辅助函数 - 假设它格式化一个字符串 - 并假设此函数应该可用于任何模块。此函数可以属于“工具”或“帮助程序”模块,然后可以重复使用并且可以测试。
要从任意模块调用此函数,我必须使用输入字符串作为参数发布消息,例如 formatString 。辅助函数已订阅 formatString 消息。但在发布 formatString 消息之前,我首先必须使用回调函数订阅 formatStringResult 之类的消息哪个可以收到结果。然后,一旦我得到结果,我就取消订阅 formatStringResult 消息。
问题(S)
我非常感谢具有在“复杂”JavaScript应用程序中实现松耦合经验的开发人员的建议。
答案 0 :(得分:2)
您实际上完美地描述了BarFoos application Framework
:
答案 1 :(得分:0)
我认为调解员不是你想要的模式,至少不是你所描述的模式 想想2个对象同时触发 formatString 。每个人都会在 formatStringResult 中得到什么?
Mediator用于向正在收听的每个人播放活动。发布商不希望广播请求(例如 formatString )而非希望通知其他人有关他们的更改自己的国家。请注意信息的来源和使用者是如何不同的。拥有一个中介意味着那些方不必彼此有一个引用来进行交流,从而降低了它的耦合。