Einzelnen Beitrag anzeigen
Alt 18.10.2008, 10:20  
dr.e.
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Andy,

Zitat:
Wie wird denn das Registry-Design-Pattern beim APF umgesetzt.
Die Registry ist eine Klasse, die über die Methoden register() und retrieve() Werte unterhalb eines Namespaces organisieren kann. Um die Registry überall in gleichem Maße zur Verfügung zu haben ist die Registry als Singleton zu behandeln. Möchtest du Werte zur Verfügung stellen, passiert das mit einem

PHP-Code:
$Reg = &Singleton::getInstance('Registry');
$Reg->register('my::namespace','mykey','myvalue'); 
Die Abfrage funktioniert äquivalent dazu per

PHP-Code:
$Reg = &Singleton::getInstance('Registry');
echo 
$Reg->retrieve('my::namespace','mykey'); 
Dabei kann der Wert beliebig sein (String, Array, Objekt, ...). Weiterhin wird die Registry als Mittel zur globalen Konfiguration verwendet. Einige Komponenten des Frameworks benötigen beispielsweise Informationen darüber, in welchem Umfeld und mit welchem Kontext die Applikation betrieben wird. Diese Parameter werden in der Registry gespeichert und später von Core-Komponenten wieder bezogen.

Zitat:
Im allgemeinen verstehe ich ja auch den Sinn (glaube ich), aber leider kann ich eben nicht verstehen, wie die Trennung in SessionRegistry und Registry zu stande kommt.
Das ist doch ganz einfach: die SessionRegistry hat über Requests hinweg und innerhalb einer PHP-Session bestand, die Werte der "normalen" Registry sind nur innerhalb eines Requests verfügbar. Was du verwendest, hängt nun vom Anwendungsfall ab. Du könntest dir z.B. überlegen, eine Business-Komponente in eine SessionRegistry zu legen, damit die Initialisierung nicht bei jedem Request erfolgen muss. Diese Performance-Optimierung ist übrigens auch mit der APF-Implementierung der SessionSingleton-Komponente möglich. Mit dieser wird eine Komponente auch über die Session hinweg gehalten. Die Verwendung unterscheidet sich dabei nicht von der des Singleton-Pattern.

Zitat:
Allerdings geht es mir hier eigentlich erstmal nur um das allgemeine Verständnis des Pattern.
Da würde ich dir wirklich empfehlen, ein Buch über Pattern und deren Anwendung zu lesen. Das hilft nicht nur dir, sondern auch uns, denn das komplette Thema Pattern hier in einem Thread zu diskutieren macht zwar Spass, aber hinterher hat dieser Thread 500 Seiten. Nicht, dass ich mich dagegen wehre, aber dann hast du etwas kompaktes zum Nachlesen. In die Diskussion werde ich mich jedoch gerne einbinrgen.

Als Einstieg würde ich dir das Buch "Patterns of enterprise application architecture" von Martin Fowler (bitte auf englisch lesen) empfehlen. Da stehen nicht nur die Pattern beschrieben, sondern auch Anwendungsfälle und wann ein Pattern besser nicht verwendet werden sollte.

Zitat:
Schau mir natürlich auch gern die APF-Komponente an.
Um dir hierbei ein bischen unter die Arme zu greifen kannst du mal auf den folgenden Seiten vorbei schauen:

* Adventure PHP Framework - Klassenreferenz Registry
* Adventure PHP Framework - Klassenreferenz Singleton SessionSingleton
* Adventure PHP Framework - Konfiguration

Die Seiten beschreiben, wie die Registry und das Thema SessionSingleton angeboten wird und verwendet werden kann.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten