Javascript 与pub/sub解耦主干

Javascript 与pub/sub解耦主干,javascript,backbone.js,requirejs,publish-subscribe,Javascript,Backbone.js,Requirejs,Publish Subscribe,我正在改进我使用主干网/require的方式,我发现了让模块耦合是多么糟糕的做法(当时我不理解解耦) 我开始玩弄并理解这一点,但从我所读到的内容来看,其他模块不应该订阅其他模块(这使得它相互耦合?)。相反,它们应该是所有模块之间的中介,告诉它们如何交互 我假设这个中介订阅了所有模块,所有模块都订阅了中介 我不知道如何实现这一点,但还没有找到一个关于如何使用主干网实现这一点的可靠的代码示例,任何关于向主干网添加pubsub的帮助都将不胜感激 很抱歉,这是一个一般性的问题,我试图围绕这个概念来思考,

我正在改进我使用主干网/require的方式,我发现了让模块耦合是多么糟糕的做法(当时我不理解解耦)

我开始玩弄并理解这一点,但从我所读到的内容来看,其他模块不应该订阅其他模块(这使得它相互耦合?)。相反,它们应该是所有模块之间的中介,告诉它们如何交互

我假设这个中介订阅了所有模块,所有模块都订阅了中介

我不知道如何实现这一点,但还没有找到一个关于如何使用主干网实现这一点的可靠的代码示例,任何关于向主干网添加pubsub的帮助都将不胜感激


很抱歉,这是一个一般性的问题,我试图围绕这个概念来思考,并找到一个广泛使用的恰当的例子。

啊哼。pubsub方法是中介模式的实现。您的调解人是您的pubsub处理程序

让我澄清一下。在pubsub模型中,注册一个频道并向其发布。其中任何有可能被监听的内容都将按照他们订阅的顺序获得您发布的内容

与中介模式的正式定义相比:

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

(直接摘自)

这对你意味着什么?只要你不做我认识的人以前做的事,你就没事这绝对是您想要避免的:

  • 模块用自己的名称注册通道
  • 其他模块通过在其频道上发布文字名称来引用它
  • 这就是事件发布/订阅模型崩溃的地方,因为它在理论上是解耦的,但在实践中,您需要知道模块的确切名称。使您的事件具有足够的通用性,以便您可以在不丢失func的情况下交换模块,并防止/避免直接访问其他模块,这样您就可以很好地进行耦合


    如果有任何不清楚的地方,请告诉我,我会尝试澄清。

    啊哼。pubsub方法是中介模式的实现。您的调解人是您的pubsub处理程序

    让我澄清一下。在pubsub模型中,注册一个频道并向其发布。其中任何有可能被监听的内容都将按照他们订阅的顺序获得您发布的内容

    与中介模式的正式定义相比:

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

    (直接摘自)

    这对你意味着什么?只要你不做我认识的人以前做的事,你就没事这绝对是您想要避免的:

  • 模块用自己的名称注册通道
  • 其他模块通过在其频道上发布文字名称来引用它
  • 这就是事件发布/订阅模型崩溃的地方,因为它在理论上是解耦的,但在实践中,您需要知道模块的确切名称。使您的事件具有足够的通用性,以便您可以在不丢失func的情况下交换模块,并防止/避免直接访问其他模块,这样您就可以很好地进行耦合


    如果有任何不清楚的地方,请告诉我,我将尝试澄清。

    有趣的是,我非常喜欢的一个图书馆叫做

    网站上有很多很好的例子,但很粗糙:

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

    有趣的是,有一个我非常喜欢的图书馆叫做

    网站上有很多很好的例子,但很粗糙:

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

    这是对理论的很好的解释,但是,如果您能指出一些代码,这将非常有帮助。它通常只在我看到示例时单击!我不用脊梁,所以我不能给你脊梁。相反,我将向您介绍我最喜欢的pubsub实现:。具有GoF中介模式+通道+许多酷的功能实现中描述的所有功能,代码易于阅读。。。这是对理论的一个很好的解释,但是,如果你能指出一些代码的话,这将非常有帮助。它通常只在我看到示例时单击!我不用脊梁,所以我不能给你脊梁。相反,我将向您介绍我最喜欢的pubsub实现:。具有GoF中介模式+通道+许多酷的功能实现中描述的所有功能,代码易于阅读。。。并且可能可以独立使用。