18

どうやらこのキー指向のアクセス保護パターン:

class SomeKey { 
    friend class Foo;
    SomeKey() {} 
    // possibly non-copyable too
};

class Bar {
public:
    void protectedMethod(SomeKey); // only friends of SomeKey have access
};

... はまだ名前が知られていないので、舌を折らずに参照できるように、適切な名前を見つけたいと思います。提案?

そのはず:

  • 簡潔
  • アクセス保護の意図を伝える
  • 理想的には、プロキシが不要であることを意味します (?)
4

4 に答える 4

5

私は好みを減らして好きです:

  • パスキーフレンドイディオム
  • passkey-door 友達のイディオム
  • 通りすがりの友達のイディオム
  • キードアフレンドイディオム.
  • 部分的な友達のイディオム
  • 制限された友達のイディオム

私は、キーロック/キー-キーホールの命名スキームからパスの命名スキームに移行しました。

于 2010-07-24T10:35:35.830 に答える
4

これをBadge Idiomと命名することを提案します。これは、要求に応じて提示される、権限の所有を証明するトークンを意味します。これは、ここでの他の多くの回答でキーという用語を中心に展開するものよりも優れた比喩であると思います.

「キー」は、プログラミング用語ではすでにかなりオーバーロードされており、少なくともルックアップと制限付きアクセスの概念を混同しています。さらに、実際の鍵は通常、メーカーからのすべてのロックのセットではなく、個々のロックを操作します。このパターンの受け入れクラスは、ロックのセットではなく、アクションの実行を求められる自己保護エンティティのセットです。

「バッジ」は、トークンが単一のオブジェクトだけでなく、他のエンティティのクラス全体に権限を付与するという原則を伝えます。この用語は (米国中心の?) 警察やセキュリティのイメージに依存しすぎている可能性があり、私はSubpoenaWarrantなどの用語を検討しましたが、サード パーティによるアクセス許可に焦点が当てられすぎているように思われました。とにかく、特定のバッジ タイプを持つ個人は、それらのバッジを尊重する個人のクラスから成文化された行動を強制することができます。全体的なやり取りは次のように表示されます。

  • A: このパーティーは騒々しすぎる。ステレオの音量を下げます。(バッジプレゼント)
  • B: オーケー、オフィサー。(うめき声)
于 2010-08-21T19:45:11.953 に答える
4

SomeKey は、Bar::protectedMethod に入るバックステージ パスに少し似ています。したがって、その分野の何でも良いはずです: パスポートのイディオム、合言葉のイディオム、パスキーのイディオム、VIP のイディオム..上品なアクセス?

于 2010-07-24T09:34:29.153 に答える
2

継承を使用して、より一般的な方法でこれを行う方法は他にもあります。ここで、クラスケーキは鍵穴と鍵の両方として機能します。ここで、cake から継承する (静的継承の場合もある) どのクラスも、cake でアクセスできるように定義された SomeClass のサブセットにアクセスできます。もちろん、複数の異なるクラスに複数の異なるサブセットを持つこともできます。

class cake;
class SomeClass {
    friend class cake;
    void foo();
};
class cake {
    void DoFoo(SomeClass& class) { class.foo(); }
};
class lols : cake {
    // Now we can DoFoo().
};

私はそれをロックとキーと呼んでいます。

于 2010-07-24T11:12:40.763 に答える