我正在制作一个计算机系统,我将其分解为几个较小的部分。
从一定的经验来看,在软件开发中保持系统小是至关重要的。
为了做到这一点,我正在实现一个服务于特定目的的模块,所有这些模块本身并不知道系统的其余部分在做什么。 (理想的)
所以这个模块去那里做了它的事情,当一个事件发生在这个模块的一个实例中时,我希望索引文件能够意识到这一点。 我不希望这个模块直接与其他模块通信,因为它们不应该相互通信,从而减少系统内的依赖性。
现在,我已经制作了实例并且实例做了一切正确, 但是当在这个实例中发生事件时,如何将该信息传递到索引文件?
此实例的事件以下列方式实现: the_div.addEventListener( '鼠标按下',this.react_to_mouse_down_function);
这里有一个问题,如何最好地将这种情况发生在索引文件中,我可以在索引文件中执行: the_div.addEventListener('click',the_function);
但是这会强制索引文件知道实例中发生的事情,因为 该实例有孩子,每个孩子都有事件检测器,他们的数字可以增长和收缩,上帝知道什么。 如果索引文件不需要了解模块的实例如何工作,那将是最好的。因此,当实例存在时,不需要动态生成新的事件监听器。
如何最好设置索引文件与此实例之间的交互?
答案 0 :(得分:1)
这听起来像是一个pub / sub问题。这将使模块在状态更改时发布特定的自定义事件,并且索引(或任何其他模块)可以根据需要订阅该事件。除了发布/订阅控制器之外,模块不与任何内容通信。
这是一个很好的链接: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript
我发现自己经常提到这个页面的各个部分。
答案 1 :(得分:0)
我找到的解决方案是拥有一个名为' messages'的指定模块,它负责接收来自实例的事件驱动消息。
消息模块的一个实例是全局的,并命名为“imessages'”。每个模块在其中发生事件时,都会检查它是否可以访问全局“消息”。对象,如果它和imessage对象包含一个与给定事件同名的函数,它会调用该函数并将相关信息作为参数发送。
现在,在指定的消息模块的索引文件中定义了给定的消息功能,从而使该模块免于与外界进行任何进一步的交互。 具有此功能的模块现在不需要与任何其他具体模块通信。只是索引文件。
只需要在每个应用此模块的API中说明,这种依赖性如何降低它的功能。