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.
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
PHP-Code
$Objekt = &Singleton::getInstance('{KlassenName}');
erzeugt werden. Bei der Verwendung von PHP 5 kann auf das
& verzichtet werden, da
Werte automatisch als Referenz übergeben werden.
Um die statische Klasse
SessionSingleton verwenden zu können, muss diese
zunächst per
PHP-Code
import('core::singleton','SessionSingleton');
eingebunden werden. Anschließend kann ein Objekt im "SessionSingleton-Modus" per
PHP-Code
$Objekt = &SessionSingleton::getInstance('{KlassenName}');
erzeut und verwendet werden. Auch hier ist darauf zu achten, dass bei Verwendung von PHP 4 das
& notiert wird.
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.
Im einfachen Anwendungsfall kann per
PHP-Code
$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.
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
PHP-Code
class myServiceLayer extends coreObject {
var $__MySpecialParam = null;
function myServiceLayer(){
}
function init($InitParam){
$this->__MySpecialParam = $InitParam;
}
}
mit der Methode
__getAndInitServiceObject() erzeugen zu können, muss folgender
Code an der gewünschten Stelle platziert werden:
PHP-Code
$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
Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese
hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.