Как назвать этот ключ-ориентированный шаблон защиты доступа?
По-видимому этот ключ-ориентированный шаблон защиты доступа:
class SomeKey {
friend class Foo;
SomeKey() {}
// possibly non-copyable too
};
class Bar {
public:
void protectedMethod(SomeKey); // only friends of SomeKey have access
};
... еще не имеет известного имени, поэтому я бы хотел найти для него хороший, чтобы мы могли ссылаться на него, не нарушая наши языки. Предложения?
Это должно быть:
- succinct
- передать цель защиты доступа
- в идеале подразумевается, что проксирование не требуется (?)
Ответы
Ответ 1
Мне нравится, уменьшая предпочтение:
- Идентификатор дружественной клавиши
- Идентификатор дружбы с ключом
- Идентификатор дружественной двери
- Ключевые слова с ключами
- Идиома частичного друга
- Идиома ограниченного друга
Я отошел от схемы именования key-lock/key-keyhole к схеме именования проходов, которая выросла на мне.
Ответ 2
SomeKey немного похож на проход Backstage, чтобы попасть в Bar:: protectedMethod. Итак, что-нибудь в этой области должно быть хорошим: паспортная идиома, идиома пассажа, идиома passkey, VIP idiom..err классный доступ?
Ответ 3
Я предлагаю назвать это Значок Знака, обозначая токен, представленный по запросу, подтверждающий владение полномочиями. Я считаю, что это лучшая метафора, чем те, которые вращаются вокруг термина "Ключ" во многих других ответах здесь.
"Ключ" уже достаточно перегружен в терминологии программирования, сочетая, по крайней мере, понятия поиска и ограниченного доступа. Кроме того, реальные ключи обычно работают с отдельными замками, а не с набором всех блокировок от производителя, а принимающий класс в этом шаблоне - это набор не блокировок, а самозащищающихся объектов, которым предлагается выполнить действия.
"Значок" передает принцип, согласно которому токен предоставляет полномочия всему классу других объектов, а не только одному объекту. Этот термин может слишком полагаться на (США-ориентированный?) Полицейский или образ безопасности, и я рассматривал такие термины, как "Призыв" или "Ордер", но они, похоже, слишком сосредоточились на предоставлении третьей стороной доступа. Во всяком случае, люди с определенным типом значка могут принуждать кодифицированное поведение от классов лиц, соблюдающих эти значки. Я вижу общее взаимодействие следующим образом:
- A: Эта партия слишком громкая. Отключите стерео. (Представляет значок)
- B: О, хорошо, офицер. (Стон)
Ответ 4
Существуют и другие способы сделать это более общим способом, используя наследование. Здесь классный торт функционирует как замочная скважина, так и ключ. Здесь любой класс, который наследует (также может быть статическим наследованием) от торта, может получить доступ к определенному подмножеству 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().
};
Я бы назвал его блокировкой и ключом.