敲碎时间的人的个人专栏
上一篇

事件集线器

广告
选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。
大纲

事件集线器

我们知道,各种抽象工厂,外观以及其他模式都能在一定程度上解耦依赖和隔离代码。这些方法的使用都是为了更好的编写可测试的代码。今天我们介绍另一种方法,那就是事件的使用。

总的来说,所有应用程序都与消息传递有关系,因此很大可能会发生耦合,因为代码必须拿到另一个对象的引用,这样才能给另一个对象发送消息或接收消息。因此这里可能存在两种耦合,一种是全局依赖,另一种是注入对象依赖。从前面的关于耦合的程度讨论中,我们知道这些依赖的耦合程度,因此应该尽可能的使用注入的方式。

今天我们讨论的基于事件的架构是这样的:

将方法注册到事件中心,指定其能够处理某些事件。方法利用集线器独立的中央处理器,负责事件请求,并等待响应。方法既能注册事件,也能抛出事件。这些方法通过回调接收异步响应。举个例子:

eventHub.fire('LOG',{
	severity: 'DEBUG',
    message: 'I am doing something'
});

//在另一些地方
eventHub.on('LOG',logIt);
function logIt(what) {
	console.log(what.severity + ':' + what.message);
}

这里还可以为LOG添加多个监听器,这里有一个疑问?eventHub这个对象可能是一个全局对象,也可能是一个局部引用,那么这里应该算做公共耦合吗?这里可以这样思考,公关耦合需要共享状态,使用eventHub的对象有没有共享eventHub的状态呢?如果有的话,那么就是全局耦合,如果没有,那就不算公共耦合。

我们知道,没有耦合的代码或者低耦合的代码是容易测试的。下一节,我们来看看如何编写这样的测试。

版权声明:著作权归作者所有。

X

欢迎加群学习交流

联系我们