11

機能フラグの概念と、このための人気のあるオープン ソース Java lib Togglzに出くわしました。これは、Martin Fowler のブログ投稿を引用しています。

基本的な考え方は、保留中のさまざまな機能の一連のトグルを定義する構成ファイルを用意することです。実行中のアプリケーションは、これらのトグルを使用して、新しい機能を表示するかどうかを決定します。

しかし、私には、これは本当に承認のように聞こえます。ユーザーはこのコンテンツを表示する権限がありますか?

たとえば、ユーザーが FizzBu​​zz メニューを表示できるようにする必要がありますか?

Togglz では、このチェックを次のように実装できます。

if(MyFeatures.ShowFizzBuzz.isActive()) {
    // Show the FizzBuzz menu.
}

たとえば、Apache Shiro では、まったく同じことができます。

ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
    // Show the FizzBuzz menu.
}

繰り返しになりますが、機能のフラグ付けは、役割または権限のチェックとまったく同じ問題のように感じます。

私は間違っていると確信していますが、方法がわかりません。そこで私は質問します: 機能のフラグ付けは、承認や役割/権限のチェックとどう違うのですか? また、この違いを例証する具体的なユースケースの種類は何ですか? 言い換えれば、承認/役割/許可チェックをいつ使用する必要があり、いつ機能フラグを使用する必要がありますか?

4

2 に答える 2

2

2 種類の機能切り替えには、Mr. Fowlers の用語を使用します。

  • ビジネスの切り替え: すべての状態がサポートされている長期的な構成の機能です。
  • リリース トグル: 古い実装または存在しない実装から「新しい」実装への移行を支援するためのものです。これの目的は、作業が完了したときに古い作業方法を廃止することです。これにより、「新しい」方法が完成していない間に現在の作業方法を維持したい場合に使用できます。ほとんどの人は、これらは可能な限り避けるべきであることに同意します。

機能のフラグ付けは、承認および役割/権限のチェックとどのように異なりますか? また、この違いを例証する具体的なユースケースの種類は何ですか?

承認と役割/権限のチェックは、Business Toggle の実装の下にある構成だと思います。認証はビジネス トグル機能です。Shiro は、認証機能を構成および適用するのに役立つツールです。Togglz は、ビジネス トグルまたはバージョン トグルを実装するためのフレームワークです。認証機能に使用できます

Togglz を使用して認証をオン/オフし、Shiro を使用してユーザーの構成を強制する場合、コードは次のようになります。

if(MyFeatures.ShowFizzBuzz.isActive()) {
  ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
  if(currentUser.isPermitted(showFizzBuzz) {
    // Show the FizzBuzz menu.
  }
}

常に認証をオンにしたいので、機能の切り替えを忘れることを選択できます。トグルは、追加のチェックと技術的負債を導入しているだけです。

承認/役割/権限チェックはいつ使用する必要がありますか? また、機能フラグはいつ使用する必要がありますか?

この決断はあなた次第だと思います。認証は機能であり、Shiro を使用して実装できます。アプリケーションには、Shiro の範囲を超えた他の多くの機能が含まれている可能性があり、Togglz を使用してそれらのオンとオフを切り替える必要があります。複雑な機能は、ビジネス ロジックを駆動するための構成が依然として必要であると私は主張します。

于 2015-02-02T15:04:51.417 に答える
1

Togglz の背後にあるロジックについてはお答えしません。FF4Jのドキュメント (Java の機能フリッピング)では、違いを説明する非常に明確なスキーマを見つけることができます。

機能の切り替えと承認

機能は処理であり、専用の Web コンソールを介して実行時に有効または無効にできる機能です。これは、コードを切り替えるためのメイン ドライバーである必要があります。構成を通じてアクティブ化/非アクティブ化する必要がありますか?

Feature Toggleメカニズムが大きな価値があることを特定したら (ff4J.org ページの下部でいくつかのユースケースを取り上げることができます)、パーミッションを確認できます。

機能トグル コンテキストで権限を確認することは、「カナリア リリース」を実行することを意味します。つまり、すべてのユーザーに対して開く前に、限られたユーザーのサブセットに対して新しい機能を開きます。

于 2015-11-01T13:33:47.627 に答える