将主干与pub / sub解耦

时间:2013-04-12 21:57:13

标签: javascript backbone.js requirejs publish-subscribe

我正在改进我使用backbone / require的方式,我发现了模拟耦合的实践有多糟糕(我当时不理解解耦)。< / p>

我开始使用MinPubSub并且了解到大多数情况,但是从我读到的内容来看,其他模块不应该订阅其他模块(这会使它耦合?)。相反,他们应该成为告诉他们如何互动的所有模块之间的中介。

我假设这个调解员订阅了所有模块,所有模块都订阅了调解员?

我不知道如何实现这一点,但仍然找到一个关于如何使用骨干实现此功能的可靠代码示例,任何有关将pubsub添加到骨干网的帮助都将受到赞赏。

对不起,这是一个问题的一般性,试图围绕这个概念,并找到一个广泛使用它的一个体面的例子。

2 个答案:

答案 0 :(得分:2)

咳咳。 pubsub方法中介模式的实现。你的调解员是你的pubsub处理程序。

让我澄清一下。在pubsub模型中,您注册一个频道并发布到它。那里可能正在倾听的任何内容都会按照他们订阅的顺序获得您发布的内容。

将此与中介模式的正式定义进行对比:

  

使用中介模式,对象之间的通信将使用中介对象进行封装。对象不再直接相互通信,而是通过中介进行通信。这减少了通信对象之间的依赖关系,从而降低了耦合。

(直接从your favourite encyclopedia拨打)

这对你意味着什么?只要你不做我认识的人过去做的事,你就没事了。 这个绝对是您要避免的:

  1. 模块注册一个具有自己名称的频道
  2. 其他模块通过在其频道上发布文字名称来引用它
  3. 这是事件发布/子模型分解的地方,因为它在理论上是分离的,但在实践中,您需要知道模块的确切名称。使您的事件足够通用,您可以在不丢失func的情况下就地交换模块,并防止/避免直接进入其他模块,并且您可以很好地进行耦合。

    如果其中任何一项不明确,请告诉我,我会尝试澄清。

答案 1 :(得分:2)

有趣的是,我非常喜欢的一个图书馆名为Mediator

它在网站上有很好的例子,但粗略地说:

$.getJSON('url/to/json', function(json) {
    mediator.publish('myData:loaded', {response: json});
});

// Somewhere else
mediator.subscribe('myData:loaded', function(json) {
    // Do something
});