您将如何在Javascript中有效地实现功能翻转(或功能标志)?

时间:2013-07-18 15:33:54

标签: javascript performance design-patterns architecture

这个问题不在于如何实际编写这样的功能标志本身。但主要是寻求有关此类系统的建议或提示。

这个想法很简单:

  

为了逐步推出/推出功能,我们需要分叉行为。

     

为此,我们创建一个包含字符串数组的featureDescriptionFlag对象。如果存在则返回true,否则返回false

但是,还必须考虑:

  • 如果不存在任何标记对象,则返回false,因为没有翻转已触发
  • 理想的条件是最终删除所有标志

我正在引用功能标志,这里描述的概念:

问题

我对实施的主要关注如下:

  1. 使用全局对象来描述标志错误
  2. 当条件语句存在时,我们是否应该缓存后续调用的结果(例如先执行true,然后在某处编辑featureDescriptionFlag,然后下一次调用返回false)
  3. 实施例

    这是我提出的第一个实现(see also on jsfiddle):

    // WARNING: Requires underscore.js
    function featureFlag(flagContainerName, elementKeyToCheck) {
      //console.log('Feature flagging on '+flagContainerName+', with ' + elementKeyToCheck); // DEBUG
      if (_.has(window.featureFlagDescriptor||{}, flagContainerName)) {
         if(_.contains(window.featureFlagDescriptor[flagContainerName]||[], elementKeyToCheck)) {
           //console.log('Disabled by '+flagContainerName+', matching ' + elementKeyToCheck); // DEBUG
           return true;
         }
      }
      return false;
    }
    

    然后,我们创建全局

    的标志描述对象
    window.featureFlagDescriptor = {someFunction: ['example']};
    

    我担心的是,允许这样的翻转可能是危险的,我在脑海中警告如何利用它。

    后来,在一个必须有两个行为的函数中,我们这样做:

    function someFunction(){
      // Code...
      if(featureFlag('someFunction', 'example')) {
        // Work only if flag exist
      } else {
        // Former behavior
      }
    }
    

    结论

    任何建议,改进建议?

    我有 created a jsfiddle on the subject ,最终会制作完整的工作样本。

0 个答案:

没有答案