强制模块具有特定功能。例如实现一个接口?

时间:2014-11-13 14:53:44

标签: javascript

在java中很简单,但是如何确保使用我的事件总线注册主题通知的模块具有所需的回调方法?

我的所有模块都遵循揭示模块模式,因此定义如下

namespace = (function() {

    //Private stuff 

    return {
        method1 : method1
    }
})();

我只需要确保模块上有一个带有一个参数的notify方法。该模块可以负责将有效载荷数据解组为预期的格式

由于

1 个答案:

答案 0 :(得分:0)

我真的想帮忙,但我不确定我理解你的术语。我将根据我的有限理解回答并根据需要进行调整

听起来我想要确保返回的对象上有一个名为notify的属性,这是一个只接受一个函数参数的函数。如果这是正确的,有两个地方可以确保所有模块都符合您的要求。

  1. 在活动巴士内
  2. 如果您编写了事件总线,您可以在其中编写几行代码,以确保模块没有附带“' notify'在它上面的属性,事件总线不会订阅模块到事件。像这样:

    if( typeof module.notify !== 'function' ){
    
        // do error handling then ...
        return false;
    }
    
    1. 将模块注册到事件总线的外部功能
    2. 如果您没有编写事件总线,则可以创建一个负责确保标准的外部函数。把它想象成#1的包装。

      function registerToEventBus( module, event ){
      
          if( typeof module.notify !== 'function' ){
              // do error handling then ...
              return false;
          }
      
          // register event to event bus then ...
          return true;
      }        
      

      我个人建议使用#2

      • 通过这种方式,你不需要知道关于事件总线本身的事情来实现它。

      • 您可以获得额外的好处,即能够严格保留事件总线以用于事件,而不是通过在其中添加模块格式强制执行来使其复杂化。

      • 您将能够将事件总线原样带到另一个项目,将其放入并编辑您的执行器功能以满足此项目的具体情况,完全没有意外破坏事件总线的风险。

      我希望这会有所帮助。如果有任何地方我误解了你,请告诉我,我会尽力解决。