Singleton / SessionSingleton

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Singleton / SessionSingleton

Beitrag von jprangenberg » 25.09.2012, 07:21:19

Hallo,

habe eine Frage zur Dokumentation: http://adventure-php-framework.org/Seit ... nSingleton

1. Was ist der Default-Wert des dritten Parameters der getServiceObject Methode? ({MODE})
2. Was ist der Unterschied zwischen Singleton und SessionSingleton erfahren?

Singleton erstellt mir eine Instanz Singleton über den Request und SessionSingleton über die komplette Session? Wann benutzt Ihr was?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Singleton / SessionSingleton

Beitrag von dr.e. » 25.09.2012, 08:21:07

Hi,
1. Was ist der Default-Wert des dritten Parameters der getServiceObject Methode? ({MODE})
Der dritte Parameter in der Methode $this->getServiceObject() - im Hintergrund ein Aufruf von ServiceManager::getServiceObject() definiert, welchen Gültigkeitsbereich das Objekt hat. Mögliche Werte sind:
  • NORMAL: Klasse wird "normal" instanziiert und konfiguriert
  • SINGLETON: Klasse wird "singleton" instanziiert und konfiguriert
  • SESSIONSINGLETON: Klasse wird "sessionsingleton" instanziiert und konfiguriert
Singleton erstellt mir eine Instanz Singleton über den Request und SessionSingleton über die komplette Session?
Korrekt.
Wann benutzt Ihr was?
Ersteres, wenn ich innerhalb eines Requests z.B. eine Datenbank-Verbindung über mehrere Calls hinweg verwenden möchte ohne sie jedesmal neu aufzubauen und zweiteres, wenn ich Daten innerhalb der Session konsistent vorhalten möchte - z.B. eingeloggter Benutzer.

Hilft dir das weiter?
Viele Grüße,
Christian

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 25.09.2012, 09:41:47

Hi Doc,

das mit den möglichen Werten von {MODE} ist mir klar. Steht ja auch so in der Dokumentation. Allerdings würde ich gerne Wissen, welcher Mode der Default-Mode ist. Welcher Mode wird gesetzt wenn ich keinen Mode angebe? :-)

Habe das soweit verstanden. Müsste allerdings nochmal mir angucken, wie ich das mit dem SessionSingleton und dem eingeloggten Benutzer - Codetechnisch - umsetze.

DANKE!

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: Singleton / SessionSingleton

Beitrag von TipTop » 25.09.2012, 10:56:11

xe0n hat geschrieben:Allerdings würde ich gerne Wissen, welcher Mode der Default-Mode ist. Welcher Mode wird gesetzt wenn ich keinen Mode angebe? :-)
Singleton-Mode.

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 25.09.2012, 11:03:08

TipTop hat geschrieben:
xe0n hat geschrieben:Allerdings würde ich gerne Wissen, welcher Mode der Default-Mode ist. Welcher Mode wird gesetzt wenn ich keinen Mode angebe? :-)
Singleton-Mode.
Wäre gut, wenn das mit in der Dokumentation aufgeführt wird. Man könnte es sich zwar per var_dump() ausgeben, in der Dokumentation wäre es aber sicherlich interessant.

EDIT: Würde es auch übernehmen, wenn ich Zugang zur Dokumentation hätte.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Singleton / SessionSingleton

Beitrag von dr.e. » 25.09.2012, 18:01:54

Hi,
Wäre gut, wenn das mit in der Dokumentation aufgeführt wird.
Valider Punkt, nehme ich in die Doku auf.
Viele Grüße,
Christian

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 25.09.2012, 23:17:22

dr.e. hat geschrieben:Hi,
Wäre gut, wenn das mit in der Dokumentation aufgeführt wird.
Valider Punkt, nehme ich in die Doku auf.
Freut mich.

Beispieltext:
...eine Service-Schicht erzeugt werden. {MODE} kann ab Version 1.5.1 die Werte

NORMAL: Klasse wird "normal" instanziiert und konfiguriert
SINGLETON: Klasse wird "singleton" instanziiert und konfiguriert
SESSIONSINGLETON: Klasse wird "sessionsingleton" instanziiert und konfiguriert

annehmen. Sofern der {MODE} Parameter nicht angegeben wird, wird die Service-Schicht SINGLETON instanziiert!
Könnte jemand mir ein Beispiel geben um eine Klasse SessionSingleton zu instanziieren um den eingeloggten Benutzer zu erhalten? Habe keine Idee, wie ich ein Benutzer-Object in der Session speichern soll und mit dem Singleton-Pattern daran komme.

Bin zu sehr auf C# getrimmt! :?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Singleton / SessionSingleton

Beitrag von dave » 26.09.2012, 10:08:13

Das UMGT bietet dafür direkt schon etwas: den UmgtUserSessionStore

Infos dazu hier: viewtopic.php?f=6&t=915&p=10018&#p10017

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Singleton / SessionSingleton

Beitrag von dr.e. » 26.09.2012, 12:48:53

Hallo Jens,

alles was du tun musst ist beim Login ein User-Objekt per

Code: Alles auswählen

$user = &SessionSingleton::getInstance('MyUserClass'); 
zu erzeugen und in allen Anwendungsfällen auch wieder so zu beziehen. Alternativ kannst du das auch per

Code: Alles auswählen

$user = &$this->getServiceObject('my::namespace', 'MyUserClass', APFService::SERVICE_TYPE_SESSION_SINGLETON); 
tun. Die Speicherung in der Session und Wiederherstellung übernimmt der ServiceManager.
Viele Grüße,
Christian

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 26.09.2012, 13:26:34

dr.e. hat geschrieben:

Code: Alles auswählen

$user = &$this->getServiceObject('my::namespace', 'MyUserClass', APFService::SERVICE_TYPE_SESSION_SINGLETON); 
tun. Die Speicherung in der Session und Wiederherstellung übernimmt der ServiceManager.
Also sofern ich das $User-Object verändere, und an einer anderen Stelle wieder per ServiceManager aufrufe, ist die Änderung immer noch aktiv? :-) Super Sache! ;-)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Singleton / SessionSingleton

Beitrag von dr.e. » 26.09.2012, 21:59:45

Absolut korrekt! Mehr ist dazu nicht notwendig.
Viele Grüße,
Christian

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 07.10.2012, 02:25:04

Hallo,

hatte folgendes vor:

Code: Alles auswählen

public function LoginUser(MyUserClass $MyUserClass)
{
    $user = &$this->getServiceObject('my::namespace', 'MyUserClass', APFService::SERVICE_TYPE_SESSION_SINGLETON); 
    $user = $MyUserClass;
} 
Das habe ich vor, da ich ja das SessionSingleton Objekt auch irgendwo mal festlegen muss?!

Dann gab es allerdings eine Fehlermeldung, die besagte das Context, Language etc. nicht gesetzt werden können. Wo liegt das Problem?
Zuletzt geändert von jprangenberg am 07.10.2012, 22:43:44, insgesamt 1-mal geändert.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Singleton / SessionSingleton

Beitrag von dave » 07.10.2012, 12:55:47

viewtopic.php?f=6&t=915&p=10018&#p10018

Lies dir mal das durch, vllt. hilft es dir ja.

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Singleton / SessionSingleton

Beitrag von jprangenberg » 07.10.2012, 22:23:22

EDIT: Ich habe mir nun mein eigenen UserSessionStore geschrieben! Hab es nun verstanden! Danke!

FRAGE 1:
Wie würdet Ihr nun vorgehen? Würdet Ihr mein UserData Objekt in den SessionStore schreiben, oder eher den geladenen User aus der Datenbank? Vor- und Nachteile?

Vorteil von Zweiterem wäre, dass ich den User nicht immer neu laden müsste, z.B. für die Erstellung einer Relation. Wie geht Ihr da vor?

FRAGE 2:
Wie komme ich nun nach dem Aufruf von GetUser() an die Methode ran? Serialisierung und Deserialisierung?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Singleton / SessionSingleton

Beitrag von dr.e. » 09.10.2012, 19:01:11

Hi,
FRAGE 1:
Wie würdet Ihr nun vorgehen? Würdet Ihr mein UserData Objekt in den SessionStore schreiben, oder eher den geladenen User aus der Datenbank? Vor- und Nachteile?
Das UMGT erzeugt den Benutzer intern an Hand der Datenbank-Informationen selbst. Du musst diesen daher nicht - wie in deinem Code passiert - überschreiben. Wenn du einenen eigenen Store oder ein direktes Speichern implementieren möchtest, dann eher so:

Code: Alles auswählen

$user = &$this->getServiceObject('my::namespace', 'MyUserClass', APFService::SERVICE_TYPE_SESSION_SINGLETON); 
$user->setFoo(...);
$user->setBar(...); 
Das Holen des Benutzers (erste Zeile) kannst du ja in eine Methode auslagern.

Wenn du das UMGT nutzt, musst du weiter nichts tun als es per

Code: Alles auswählen

$store = $this->getServiceObject('modules::usermanagement::biz', 'UmgtUserSessionStore', APFService::SERVICE_TYPE_SESSION_SINGLETON);
$user = $store->getUser($applicationIdentifier); 
deinen Benutzer aus der Session zu lasen.
Vorteil von Zweiterem wäre, dass ich den User nicht immer neu laden müsste, z.B. für die Erstellung einer Relation. Wie geht Ihr da vor?
Was genau meinst du damit?
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast