如何给这种基于关键字的访问保护模式命名?

18

显然,这种基于键的访问保护模式

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

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

该内容尚未被命名,因此我想为它找一个好的名称,以便我们能够简单地提到它。有什么建议吗?

它应该是:

  • 简洁明了
  • 表达访问保护的意图
  • 最好暗示不需要代理 (?)

好问题。我觉得它可以重新构建一下,以允许最大限度的重复使用。考虑一下... - GManNickG
@GMan:现在我很好奇,我看不出如何提高可重用性。 - Georg Fritzsche
男人,它就在我的舌尖上!唉。 - GManNickG
啊,明白了。正在打字。简单的概括,有点尴尬我用了这么长时间。 :) (实际上并没有什么很大的变化...) - GManNickG
在改进可重用性方面开了一个侧面问题,以分离出一个旁观讨论。 - Georg Fritzsche
4个回答

5

我喜欢的顺序是:

  • 密钥好友成语
  • 密钥-门好友成语
  • 通行证-门好友成语
  • 钥匙-门好友成语
  • 部分好友成语
  • 限制好友成语

我从钥匙锁/钥匙孔命名方案转向了通行证命名方案,这个方案让我越来越喜欢。


嗯,我本来希望有更多的投票并且不必在两个答案之间做出选择……额,好吧,显然这对很多人来说并不重要。个人而言,我现在会选择 passkey - Georg Fritzsche

4

SomeKey看起来有点像进入Bar::protectedMethod的后台通行证。因此,该区域中的任何内容都应该是好的:护照习语、口令习语、通行证习语、VIP习语...嗯,高档访问?


你在这里有最喜欢的一个吗?对我来说,我最喜欢* pass-key *,因为它短小精悍,也很描述问题。 - Georg Fritzsche

4
我提议将其命名为“徽章习语”,表示在请求时出示的证明拥有权威的标记。我认为这比其他答案中围绕术语“键”旋转的隐喻更好。
在编程术语中,“键”已经相当过载,混淆了查找和受限访问的概念。此外,真正的钥匙通常操作单个锁,而此模式中的接受类是一组自我保护实体,被要求执行操作的不是锁的集合,而是这些实体的集合。
“徽章”传达了令牌授予其他实体类的权威原则,而不仅仅是单个对象。这个术语可能过于依赖于(美国为中心的?)警察或安全意象,我考虑过像“传票”或“许可证”这样的术语,但它们似乎太专注于第三方授予访问权限。无论如何,具有特定徽章类型的个人可以强制执行尊重这些徽章的个人类的编码行为。我看到总体交互如下:
  • A:这个派对太吵了。调低音响。(呈现徽章)
  • B:哦,好的,警官。(呻吟)

嗯,我明白你的观点,但对我个人来说,与“钥匙/锁”等相比,“关联”并没有那么突出。此外,钥匙并不总是用于单个锁:我这里的房子的钥匙可以打开我的公寓、主门、地下室门等。 - Georg Fritzsche

3

有其他更一般的方法可以使用继承来实现,与此同时,类蛋糕既充当钥匙孔又充当钥匙。在这里,任何从蛋糕类继承(也可以是静态继承)的类都可以访问在蛋糕类中定义为可访问的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().
};

我会把它命名为锁与钥匙。


尽管GMan另外添加了一个扩展,但问题仍然是关于通用方法的命名。 - Georg Fritzsche
打开了旁边的问题,这样我们可以将其分为两个独立的讨论。 - Georg Fritzsche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接