Statische/dynamische Initialisierung des DIServiceManagers

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
trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Statische/dynamische Initialisierung des DIServiceManagers

Beitrag von trx » 30.09.2009, 15:20:16

Hi,

möchte dieses Thema als Ergänzung zur Doku des DIServiceManagers nutzen, das sich für mich persönlich insbesondere bei der dynamischen Initialisierung per init noch einige Fragen stellen.
Die statische Initialisierung habe ich der Vollständigkeit halber erwähnt, obwohl ich glaube, dass diese relativ klar erklärt wird.
Um mein Problem zu verdeutlichen bleibe ich mal bei den Beispielen der Doku:

Code: Alles auswählen

[GuestbookService]  
namespace = "modules::guestbook::biz" 
class = "GuestbookManager" 
servicetype = "..." 
 init.database.method = "setDBService" 
 init.database.name = "modules::guestbook" 
 init.database.namespace = "DataService" 
   
[DataService] 
namespace = "modules::guestbook::biz" 
class = "GuestbookMapper" 
servicetype = "..."   


Als "GuestbookService" benutze ich also die Businesskomponente "GuestbookManager", die die Methode setDBService() implementiert. Diese greift jetzt auf die unter [DataService] konfigurierte Datenkomponente zu, aber in welcher Form und inwiefern?

Im weiteren enthält das Beispiel ja Codeschnipsel des GuestbookManagers namentlich:

Code: Alles auswählen

class GuestbookManager extends coreObject {    
   ...   
    function setDBService($dbService){ 
       $this->dbService = $dbService; 
    }
   ...
}

Der Methode setDBService() wird also vom DataService irgendein Paramter übergeben, aber wie, dass geht aus der Doku noch nicht wirklich hervor. Hoffe Doc kann hier etwas Licht ins Dunkel bringen.

Gruß
Sebastian

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

Re: Statische/dynamische Initialisierung des DIServiceManagers

Beitrag von dr.e. » 30.09.2009, 16:09:19

Hi trx,

Als "GuestbookService" benutze ich also die Businesskomponente "GuestbookManager", die die Methode setDBService() implementiert. Diese greift jetzt auf die unter [DataService] konfigurierte Datenkomponente zu, aber in welcher Form und inwiefern?

Der DIServiceManager nutzt die Konfiguration um bei der Erzeugung der angeforderten Komponente eine Initialisierung durchzuführen. Hierzu nutzt er wiederum ein Service-Definition, die du mit den Parametern "name" und "namespace" angibst. In Pseudo-Quellcode ausgedrückt bedeutet das folgendes:

Code: Alles auswählen

a) Lese Definition ein
b) Initialisiere Komponente mit den APF-Parametern Context und Sprache
c) Initialisiere die Komponente mit statischen Variablen
   1) Rufe setter auf und übergebe Parameter aus der Config
d) Initialisiere die Komponente mit weiteren Service-Objekten
   1) Erstelle Service -> a)
   2) Rufe setter auf und übergebe den Service als Parameter

Die genaue Funktion kannst du dir verdeutlichen, wenn du die Methode coreObject::__getDIServiceObject() ansiehst.

Der Methode setDBService() wird also vom DataService irgendein Paramter übergeben, aber wie, dass geht aus der Doku noch nicht wirklich hervor.

Nein. der Methode GuestbookManager::setDBService() wird ein Service vom Typ (=Klasse) GuestbookMapper übergeben. Was du intern damit anstellst bleibt dann dir überlassen, grundsätzlich sollte dieser jedoch in eine interne Variable "gespeichert" werden. Dies hast du ja auch schon so umgesetzt.

Beantwortet das deine Frage?
Viele Grüße,
Christian

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Statische/dynamische Initialisierung des DIServiceManagers

Beitrag von trx » 30.09.2009, 18:12:33

Beantwortet das deine Frage?


Ja, dass tut es, vielen Dank!

Nein. der Methode GuestbookManager::setDBService() wird ein Service vom Typ (=Klasse) GuestbookMapper übergeben. Was du intern damit anstellst bleibt dann dir überlassen, grundsätzlich sollte dieser jedoch in eine interne Variable "gespeichert" werden. Dies hast du ja auch schon so umgesetzt.


Hatte es nämlich bis jetzt so gedeutet, dass dynamische Initialisierung bedeutet, der per init konfigurierte Komponente würde eine angegebene Methode ausführen und dem Service per return etwas "übergeben".
Aber diese Funktionsweise beinhaltet, eine Ecke weitergedacht, die gleiche Funktionalität, nur eben noch flexibler.


Gruß
Sebastian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast