2010-07-24 9 views
14

Offenbar this key-oriented access-protection pattern:Wie nennt man dieses Schlüssel-orientierte Zugriffsschutzmuster?

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

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

... einen bekannten Namen hat noch nicht, so würde Ich mag eine gute finden für sie, um es so können wir, ohne zu brechen unsere Zungen verweisen. Vorschläge?

es sein sollte:

  • prägnante
  • die Absicht des Zugangs-Schutz vermitteln
  • idealerweise bedeuten, dass kein Proxy erforderlich ist
+0

Gute Frage. Ich habe das Gefühl, dass es etwas neu strukturiert werden kann, um eine maximale Wiederverwendung zu ermöglichen. Nachdenken darüber ... – GManNickG

+0

@GMan: Jetzt bin ich neugierig, ich konnte nicht sehen, wie man die Wiederverwendbarkeit verbessert. –

+0

Mann, es liegt mir auf der Zunge! Blargh. – GManNickG

Antwort

4

Ich mag, bevorzugt abnehmend:

  • passkey Freund Idiom
  • passkey-door Freund Idiom
  • Schlupftür Freund Idiom
  • Schlüssel Tür Freund Idiom
  • partial-Freund idiom
  • eingeschränkt-freund idiom

Ich entfernte mich von dem Schlüssel-Schloss/Schlüssel-Schlüsselloch-Namensschema zum Pass-Namensschema, das auf mir wuchs.

+0

Hm, ich hatte auf mehr Voting gehofft und musste nicht zwischen 2 Antworten wählen ... naja, anscheinend ist das für so viele Leute egal. Ich gehe jetzt persönlich mit * passkey *. –

4

somekey sieht ein bisschen wie ein (?) Backstage Pass um in Bar :: protectedMethod zu gelangen. Also alles in diesem Bereich sollte gut sein: Pass-Idiom, Paragraf-Idiom, Passkey-Idiom, VIP-Idiom..err classy Zugang?

+0

Ich mag Backstage Pass idiom – stefaanv

+0

Haben Sie einen einzigen Favoriten hier? Ich mag * Pass-Key * am meisten von diesen für kurz und (zumindest für mich) beschreibend. –

2

Es gibt andere Möglichkeiten, dies auf eine allgemeinere Art und Weise zu tun, indem Vererbung verwendet wird. Hier funktioniert der Klassenkuchen sowohl als Schlüsselloch als auch als Schlüssel. Hier kann jede Klasse, die von cake erbt (könnte auch statische Vererbung sein), auf die Teilmenge von SomeClass zugreifen, die in cake als zugreifbar definiert ist, und natürlich könnten Sie mehrere verschiedene Teilmengen in mehreren verschiedenen Klassen haben.

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

Ich würde es Schloss und Schlüssel nennen.

+0

Obwohl GMan zusätzlich eine Erweiterung hinzugefügt hat, geht es immer noch um die Benennung des allgemeinen Ansatzes. –

+0

Geöffnet [Seitenfrage] (http://stackoverflow.com/questions/3324898/can-we-increase-the-re-usability-of-this-key-oriented-access-protection-pattern) so können wir dies machen zwei getrennte Diskussionen. –

4

Ich schlage vor, dies die Badge Idiom zu nennen, die ein Token bedeutet, das auf Anfrage vorgelegt wird, der Besitz von Autorität beweist. Ich glaube, dass dies eine bessere Metapher als die um den Begriff Key in vielen der anderen Antworten hier ist.

"Schlüssel" ist in der Terminologie der Programmierung bereits ziemlich überladen, wobei zumindest die Begriffe Nachschlagen und eingeschränkter Zugriff verschmolzen sind. Außerdem operieren reale Schlüssel normalerweise individuelle Sperren, nicht die Menge aller Sperren von einem Hersteller, und die akzeptierende Klasse in diesem Muster ist eine Menge nicht von Sperren, sondern von selbstschützenden Einheiten, die aufgefordert werden, Aktionen auszuführen.

"Badge" vermittelt das Prinzip, dass das Token einer ganzen Klasse von anderen Entitäten, nicht nur einem einzelnen Objekt, Autorität verleiht. Der Begriff könnte zu abhängig sein von (US-centric?) Polizei oder Sicherheitsbildern, und ich habe Begriffe wie Vorladung oder Warrant in Betracht gezogen, aber sie schienen zu konzentriert auf die Gewährung von Zugriff durch Dritte.Auf jeden Fall können Individuen mit einem bestimmten Abzeichen-Typ kodifizierte Verhaltensweisen von den Klassen von Individuen, die diese Abzeichen respektieren, erzwingen. Ich sehe die gesamte Interaktion wie folgt:

  • A: Diese Party ist zu laut. Drehen Sie Ihre Stereoanlage herunter. (Präsentiert Abzeichen)
  • B: Oh, OK, Offizier. (ächzen)
+0

Hm, ich sehe deinen Punkt aber (für mich persönlich) springt die Assoziation nicht so stark in mein Gesicht wie bei Schlüssel/Schloss etc .. Auch bei einzelnen Schlössern funktionieren nicht immer Tasten: Mein Schlüssel für dieses Haus hier öffnet meine Wohnung, die Haupttür, die Kellertür, ... –