この質問は、そのような機能フラグ自体を実際に記述する方法に関するものではありません。しかし、ほとんどの場合、そのようなシステムに関する推奨事項やヒントを探すためです.
アイデアは簡単です:
機能を段階的にロールアウト/インするには、動作をフォークする必要があります。
そのために、
featureDescriptionFlag
文字列の配列を含むオブジェクトを作成します。存在する場合は returntrue
、そうでない場合はfalse
しかし、次のことも考慮する必要があります。
- フラグ オブジェクトが存在しない場合は
false
、フリップがトリガーされていないかのように戻ります。 - 理想的な条件は、最終的にすべてのフラグを削除することです
ここで説明する機能フラグ、概念について言及しています。
- マーティン・フォワー、そして
- Flickrで説明されているように、また
- このStackOverflowの質問で説明
質問
私の実装に関する主な懸念事項は次のとおりです。
- グローバルオブジェクトを使用してフラグを説明するのは間違っている
- 条件ステートメントが存在する場合、後続の呼び出しの結果をキャッシュする必要があります (たとえば、最初に 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']};
ここでの私の懸念は、そのような反転を許可するのは危険かもしれないということです。これがどのように悪用される可能性があるかについて、私は警戒しています。
後で、2 つの動作が必要な関数で、次のようにします。
function someFunction(){
// Code...
if(featureFlag('someFunction', 'example')) {
// Work only if flag exist
} else {
// Former behavior
}
}
結論
推奨事項、改善提案はありますか?
この件に関して jsfiddleを作成しましたが、最終的には完全に機能するサンプルを作成する予定です。