3

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

这个想法很简单:

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

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

但是,还必须考虑:

  • 如果不存在标志对象,false则返回未触发翻转
  • 理想的条件是最终删除所有标志

我指的是功能标志,这里描述的概念:

问题

我对实施的主要担忧如下:

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

实现示例

这是我想出的第一个实现(另见 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
  }
}

结论

有什么建议、改进建议吗?

我已经创建了一个关于该主题的 jsfiddle,最终将制作一个完整的工作示例。

4

0 回答 0