Quicknavi |
|
Klassen-Referenz - Singleton / SessionSingleton
Das Singleton-Pattern ist ein in der Entwicklung weit verbreitetes Pattern. Es gehört zur
Gruppe der Erzeuger-Pattern und wird vielfach deshalb eingesetzt um Informationen oder Funktionen
von definierten Objekten innerhalb einer kompletten Applikation zur Verfügung zu haben. Im
Bereich der Trennung einer Applikation in unterschiedliche Schichten wird das Singleton-Pattern oft
dafür verwendet, Service-Schichten singleton zu instanziieren um eine bessere Performance bei
der Abarbeitung von Business-Prozessen oder dem Laden und Speichern von Daten zu erziehlen.
Das Adventure-PHP-Framework implementiert zwei spezielle Formen des Entwurfsmusters: eine abstrakte
Singleton-Klasse und eine abstrakte Session-Singleton-Klasse. Beide bieten die Möglichkeit,
beliebige Klassen im "Singleton-Modus" zu instanziieren. Das Singleton-Pattern wird
aus den bereits genannten Gründen im serviceManager bereits implizit eingesetzt. Die
Session-Singleton-Implementierung hält Objekte über eine (PHP-)Session als
Singleton-Objekte vor. Die Verwendung gestaltet sich analog zur Singleton-Klasse.
1. Singleton
Da die Singleton-Klasse bereits sehr tief im Framework verwoben ist, muss diese nicht explizit
eingebunden werden. Um eine Klasse im Singleton-Modus instanziieren können, muss diese an allen
Stellen, an denen das Objekt Verwendung findet per
$Objekt = &Singleton::getInstance('{KlassenName}');
erzeugt werden. Bei der Verwendung von PHP 5 kann auf das & verzichtet werden, da
Werte automatisch als Referenz übergeben werden.
2. SessionSingleton
Um die statische Klasse SessionSingleton verwenden zu können, muss diese
zunächst per
import('core::singleton','SessionSingleton');
eingebunden werden. Anschließend kann ein Objekt im "SessionSingleton-Modus" per
$Objekt = &SessionSingleton::getInstance('{KlassenName}');
erzeut und verwendet werden. Auch hier ist darauf zu achten, dass bei Verwendung von PHP 4 das
& notiert wird.
3. Verwendung des serviceManagers
Wie bereits erwähnt, besitzt jede von coreObject abgeleitete Klasse private
Wrapper-Methoden um Service-Schichten im Singleton- oder seit Version 1.5.1 im SessionSingleton-Modus
zu erstellen. Hier wird zwischen zwei Möglichkeiten unterschieden: einfaches ServiceObjekt und
initialisiertes ServiceObjekt. Für einfache Anwndungsfälle genügt das blanke
Erstellen eines Singleton-Objekts, in komplexeren und für mehrfache Verwendung ausgelegte
Service-Schichten muss diese oft vor Verwendung mit Konfigurationsparameter initialisiert werden.
Seit Version 1.5.1 können die beiden Methoden mit einem weiteren Parameter ausgestattet werden,
der indiziert, wie eine ServiceSchicht erzeugt werden soll.
Als Service-Objekt bzw. Service-Schicht wird im Allgemeinen die Instanz einer Klasse genannt, die
einer Applikationsschicht im Sinne der 3-Schicht-Architektur einen Service zur
Verfügung stellt. Im Fall der Kommunikation der Business-Schicht mit der Datenschicht, stellt
die Datenschicht den Service-Layer für die Business-Schicht dar. Im Fall der
Präsentationsschicht fungiert die Businessschicht als Service-Komponente zur Koordinierung der
Applikationsabläufe.
3.1. __getServiceObject()
Im einfachen Anwendungsfall kann per
$SL = &$this->__getServiceObject('service::layer::namespace','ServiceLayerClassName','{MODE}');
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.
3.2. __getAndInitServiceObject()
Um eine Klasse mit der Methode __getAndInitServiceObject() instanziieren zu
können, muss diese von coreObject ableiten und eine init()
Methode implementieren. Die init() Funktion ist dabei für die Initialisierung
der Klasse zuständig. Der Parameter kann dabei ein Array oder ein einfacher String sein. Um eine
Instanz der Klasse
class myServiceLayer extends coreObject {
var $__MySpecialParam = null;
function myServiceLayer(){ }
function init($InitParam){ $this->__MySpecialParam = $InitParam; // end function }
// end class }
mit der Methode __getAndInitServiceObject() erzeugen zu können, muss folgender
Code an der gewünschten Stelle platziert werden:
$SL = &$this->__getAndInitServiceObject('service::layer::namespace','myServiceLayer','InitParamValue','{MODE}');
Im konkreten Anwendungsfall ist InitParamValue durch einen entsprechenden
Initialisierungsparameter zu ersetzen. {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.
Kommentare
Bitte geben Sie Ihren Kommentar hier ein. Füllen Sie alle mit * gekennzeichneten Felder vollständig und korrekt aus. Um zum Artikel zurückzukehren klicken sie bitte hier. Zur Formatierung des Textes können folgende BBCode-ähnliche die Zeichen verwendet werden:- [f]..[/f]: fett
- [k]..[/k]: kursiv
- [u]..[/u]: unterstrichen
Hinweis: Formatierungszeichen in Name und E-Mail-Adresse werden nicht akzeptiert.
|