Frage zu ServiceObjects

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Frage zu ServiceObjects

Beitrag von Screeze » 03.08.2010, 13:47:28

Ich hab da grad mal ne ganz grundlegende Frage:

Wenn ich 2 ServiceObjects benötige, die sich aber durch den $InitParam unterscheiden, was passiert wenn ich die als SIngleton beziehen will?

Beispiel:
Ein ServiceObject "Warenkorb" oder so. Sollte ich aus welchen gründen auch immer, im selben request 2 versch. Warenkörbe behandeln wollen, das aber an mehreren stellen (daher singleton), was passiert wenn ich das mache ($initParam ist die ID des warenkorbs):

Code: Alles auswählen

$Wk1 = &$this->__getAndInitServiceObject('....','Warenkorb',1);
$Wk2 = &$this->__getAndInitServiceObject('....','Warenkorb',2);

Bekomm ich jetzt bei $Wk2 das objekt von Wk1, oder wird der parameter unterschieden?

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

Re: Frage zu ServiceObjects

Beitrag von dr.e. » 03.08.2010, 18:05:27

Hallo Ralf,

die Methode __getAndInitServiceManager() ist nur eine facade auf den ServiceManager. Dieser erstellt zwar das Objekt SINGLETON oder auch SESSIONSINGLETON, die init()-Methode wird jedoch trotzdem jedes mal aufgerufen. Das muss auch so sein, denn bei einem serialisierten Objekt wird beispielsweise eine DB-Verbindung nicht mit serialisiert. In deinem Beispiel solltest du also zwei unterschiedlich initialisierte Objekte mit jeweils der gleichen Referenz bekommen.

Möchtest du unterschiedliche Instanzen des Objekts haben, ist SINGLETON oder auch SESSIONSINGLETON nicht die richtige Wahl. Hier solltest du dann besser einen BasketContainer SINGLETON oder auch SESSIONSINGLETON erzeugen und dir von ihm die Wahrenkörbe mit der entsprechenden ID geben lassen (z.B.

Code: Alles auswählen

$basketCont->getBasket(1)
).
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Frage zu ServiceObjects

Beitrag von Screeze » 03.08.2010, 18:12:24

Also im Endeffekt ne Factory, die das intern cached..
Kann ich das in der Factory so beziehen, wenn ich das als NORMAL deklariere? dann muss ich nicht alles manuell setzen...

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

Re: Frage zu ServiceObjects

Beitrag von dr.e. » 03.08.2010, 22:37:47

Hallo Ralf,

korrekt. Sofern du den Modus NORMAL nutzt, ist die Methode eine reine Factory-Methode, die eine Initialisierung über die init()-Methode bereitstellt. Wie du das erzeugte Objekt weiter benutzt ist letztlich deine Entscheidung.

Kannst du mal einen konkreten Anwendungsfall des Konstrukts aufzeigen, dann können wird das vielleicht an einem kleinen Code-Snippet diskutieren.
Viele Grüße,
Christian


Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast