Service-Objects

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Service-Objects

Beitrag von jprangenberg » 24.09.2010, 07:44:40

Hallo zusammen,
ich hätte mal eine Frage.

Wann nutze ich:
-&APFObject::__getDIServiceObject
-&APFObject::__getServiceObject

Was macht das für ein Unterschied? Wann nutzt Ihr dies überhaupt? Immer wenn ich mein Tool "MessageManager" benutzen will, mache ich das mit __getServiceObject($namespace, $app). Jedoch weiß ich nicht genau, wieso ich das so mache!

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

Re: Service-Objects

Beitrag von dr.e. » 24.09.2010, 10:55:02

Hi,

Was macht das für ein Unterschied?

Der Unterschied besteht darin, dass das zurückgegebene Objekt unterschiedlich erzeugt wird.
Der "normale" Service-Manager erzeugt dir ein APF-Objekt, das lediglich mit den im APF relevanten Informationen ausgestattet ist. Dieses wird in den verschiedenen Modi NORMAL, SINGLETON, SESSIONSINGLETON erzeugt und zurückgeliefert. Es kennt damit die aktuelle Sprache und den aktuellen Kontext des aufrufenden Objekts. Letzteres ist z.B. für die Konfiguration notwendig.
Der DI-Service-Manager erzeugt die Objekte grundsätzlich wie der "normale" Service-Manager hat jedoch dann noch einen Mechanismus zur Initialisierung des Services, der auf dem dependency injection-Prinzip basiert. Hierdurch kannst du deinen Service nicht nur mit statischen Attributen, sondern auch mit anderen Services (Datenbank-Verbindungen, OR-Mapper, ...) initialialisieren. Das hat den Vorteil, dass du die Ebenen einer Applikation stärker entkoppelst und dadurch austauschbar machst.

Wann nutzt Ihr dies überhaupt?

Sobald eine Schicht einer Anwendung bzw. eine Komponente aufwändiger konfiguriert werden soll, wie das mit dem Service-Manager notwendig ist. Das ist grundsätzlich dann der Fall, wenn es nicht reicht, dem Service einen Konfigurations-String zu übergeben, sondern wenn es notwendig ist, diesen mit einem anderen Service zu initialisieren.

Immer wenn ich mein Tool "MessageManager" benutzen will, mache ich das mit __getServiceObject($namespace, $app). Jedoch weiß ich nicht genau, wieso ich das so mache!

In diesem Fall nutzt du __getServiceObject() - und damit implizit den Service-Manager -, weil der MessageManager Kontext und Sprache (=aktuelle Applikations-Informationen) benötigt. Erzeugst du diesen nur mit "new", kennt er diese Informationen nicht und kann ggf. keine Kontext-abhängige Konfiguration aufrufen.

Ich hoffe, die Unterschiede sind etwas klarer geworden.
Viele Grüße,
Christian

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

Re: Service-Objects

Beitrag von jprangenberg » 24.09.2010, 10:59:13

Super Antwort! Danke :)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast