Adventure,PHP,Framework,PageController,FrontController,Pattern,Objektorientierung,OO,Software,Design,Wiederverwendbarkeit,UML,Tutorial,Benchmark,ausgezeichnete Performance

Suche:    
Downloads  |  SVN!  |  Roadmap  |  Forum!  |  Bugtracking  |  Gästebuch  |  Backlinks!  |  Referenzen!  |  Sitemap  |  Impressum  
 
Deutsch | English Adventure PHP Framework  Bookmark @ Technorati Bookmark @ del.icio.us Bookmark @ Mr. Wong Bookmark @ Simpy Bookmark @ Google Bookmark @ Digg.com Adventure PHP Framework Seite 030_klassenreferenz_singleton_sessionsingleton drucken!

Klassen-Referenz - Singleton / SessionSingleton

Artikel bewerten:
Bitte bewerten Sie den Artikel per Klick auf einen der angezeigten Sterne:
Zurück zum Artikel!
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

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.


Powered by WebRing.