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

我喜欢,在减少偏好:

  • 钥匙朋友成语
  • 钥匙门朋友成语
  • 过门朋友成语
  • 钥匙门朋友成语
  • 部分朋友成语
  • 限制朋友成语

我从 key-lock/key-keyhole 命名方案转移到 pass 命名方案,它在我身上不断发展。

于 2010-07-24T10:35:35.830 回答
4

SomeKey 看起来有点像进入 Bar::protectedMethod 的 Backstage 通行证。所以那个领域的任何东西都应该是好的:护照成语,口号成语,密码成语,VIP成语..err优雅访问?

于 2010-07-24T09:34:29.153 回答
4

我建议将此命名为Badge Idiom,表示根据请求提供的令牌,以证明拥有权限。我相信这比这里的许多其他答案中围绕Key一词的比喻更好。

“Key”在编程术语中已经相当多,至少混淆了查找和受限访问的概念。此外,真正的钥匙通常操作单独的锁,而不是制造商提供的所有锁的集合,并且这种模式中的接受类不是锁的集合,而是被要求执行操作的自我保护实体的集合。

“徽章”传达了令牌将权限授予整个类别的其他实体的原则,而不仅仅是单个对象。该术语可能过于依赖(以美国为中心的?)警察或安全图像,我确实考虑过像SubpoenaWarrant这样的术语,但它们似乎过于关注第三方授予访问权限。无论如何,具有给定徽章类型的个人可以强制从尊重这些徽章的个人类别中进行编码行为。我看到这样的整体交互:

  • A:这个聚会太吵了。关掉你的立体声音响。(出示徽章)
  • B: 哦,好的,警官。(呻吟)
于 2010-08-21T19:45:11.953 回答
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 回答