是否有任何模式可以说明在使用通过Pub / Sub库使用松散耦合的Javascript模块(在Web浏览器中)时如何避免使用事件名称的魔术字符串?

我正在使用require.js和amplify.js开发基于模块化的Web应用程序。我正在使用放大来发布和订阅事件,但是当然这要求发布者和订阅者都知道事件标签是什么。我想避免对这些事件标签使用魔术字符串。我在想每个模块都有一个关联的“eventsList.js”文件,或者类似的东西会列出该模块要发布的事件。对于任何想要订阅其他模块事件的模块,它将为每个感兴趣的模块导入每个事件列表,这还可以防止事件标签泄漏到全局 namespace 中。

我特别想避免在我的应用程序中的每个模块上都有一个“主事件列表”。

有没有人取得类似的成就?

最佳答案

我还担心将魔术字符串用于主题。您找到合适的解决方案了吗?我目前去了主赛事名单,对此我并不特别满意:

var app = {
    events: {
        mod1: {
            topica: 'topic-a',
            topicb: 'topic-b'
        },
        mod2: {
            topicx: 'topic-x',
            topicy: 'topic-y'
        }
    }
}

//usage
amplify.publish(app.events.mod1.topica)

09-25 18:02