Configuration Manager für PHP
Frage
Ich arbeite an Code Refactoring der Konfigurationsdatei Laden Teil in PHP. Ich war mit Dateien von mehreren Quellen ‚ini‘ früher, aber jetzt plane ich für einzelne XML-Datei zu gehen, die alle Konfigurationsdetails des Projektes werden enthalten. Das Problem ist, wenn jemand Konfigurationsdatei in ini oder DB oder irgendetwas anderes und nicht der Standard eines (in diesem Fall XML) will, sollte mein Code, dass ein Teil behandeln.
Wenn jemand will, wie ini für andere Konfigurationsoption gehen, er wird ini-Datei ähnlich wie meine XML-Konfigurationsdatei und meine Konfigurationsmanager erstellen sollte darauf alles wie Parsing nehmen, im Cache gespeichert werden. Dafür brauche ich kann ein Mechanismus richtige Schnittstelle für meine Konfigurationsdaten sagen, wo das Geschäft zugrunde liegenden Daten kann alles (XML, DB, ini usw.) getätigt wird auch auf diesen zugrunde liegenden Speichern und zu jeder Zeit in der Zukunft abhängig sein, ich will nicht, es sollte dies sein erweiterbar auf andere Dateiformate.
Lösung
Unter der Annahme, Sie wollen, um eine Klasse verwenden, um alle zu handhaben, haben Sie 3 Möglichkeiten:
- Haben Sie eine Basisklasse genannt etwas wie
ReadConfigurationBase
dann 3 Implementierungsklassen,ReadConfigurationXML
,ReadConfigurationINI
undReadConfigurationDatabase
und Sie würden das Recht wählen haben - Wie oben, aber eine Fabrik unter Verwendung von in. Wie bestanden etwas basiert weg zu wählen, ob Sie
config.xml
passieren würde es wissenReadConfigurationBase
zurückzukehren implementiertReadConfigurationXML
- Haben Sie eine Klasse namens
ReadConfiguration
und es wirkt als Schritt 2, aber schafft, enthält, und besitzt, die drei anderen Klassen.
Die drei Nicht-Basisklassen würden einfach wissen, wie diese Art von Konfigurationsdatei zu lesen, und die Informationen zurück in allgemeiner Art und Weise passieren. denken entlang der Linien einer Schnittstelle. Sie wissen, dass Sie die Daten bekommen können, aber Sie mich nicht, wie
würde ich vorschlagen, die Option 3, da es das Leben am einfachsten machen würde. Sie möchten gerne ein wenig Änderung zu tun haben, jedes Mal wenn Sie wollen eine Speichermethode hinzufügen, aber das wäre nur ein wenig in die ReadConfiguration
Klasse hinzufügen.
Es gibt einen Weg Sie es 100% dynamisch machen könnte, aber das würde die Sache noch komplizierter, und ich glaube nicht, Sie brauchen es für diese wirklich.
Andere Tipps
Hier finden Sie aktuelle Zend_Config . Es bietet Adapter für Arrays, XML und Inis. Wie alle Komponenten in Zend Framework, kann es verwendet, um aus dem verbleibenden Rahmen isoliert werden. Auch wenn Sie es nicht verwenden wollen, ist es gut gestaltet und Sie vielleicht ein paar Ideen für Ihre eigenen Konfigurationsmanager von ihm erhalten.