Beschreibung
Beim Entwickeln von Flash Applikationen und Seiten benötigt man oft Konfigurationen die aus mehren Quellen aus zusammengesetzt werden. Als Beispiel könnte man hier die Kombination von FlashVars und einer XML Datei die später geladen wird, anführen. Guave Studios versucht hier immer wieder generalisierte Abläufe zu finden um den individuellen Testaufwand zu reduzieren.
Beide enthalten Konfigurationsparameter und müssen an einem Punkt zusammengefügt werden. Wichtig ist hierbei aber, dass die Konfigurationseinträge in den richtigen Formaten und Reihenfolgen und IDs aufeinander abgestimmt werden.
Fcfg bietet hier eine ganz einfachen Ansatz. Es gibt verschiedene Reader, die je nach Datenquelle die Konfigurations IDs und Werte einlesen. Der zuletzt eingefügte Reader überdeckt sozusagen die unteren Reader und bildet somit einen Stammbaum. Die originalen Werte bleiben dadurch bestehen.
var cfg:Fcfg = Fcfg.getUniqueInstance(); cfg.addReader( { config:1} ); cfg.addReader( { config:2} ); trace("config: "+cfg.g("config")); //Output: config 2
Mehrere Quellen
Konfigurationen von mehreren Quellen. Derzeit integriert sind:
- Flash Objects (Stage parameters, objects)
- XML Dateien
Als Beispiel eine Normale Applikation die default Values hat, Parameter über FlashVars übergeben bekommt und nachträglich eine XML Config ladet:
var cfg:Fcfg = Fcfg.getUniqueInstance(); //initialize application default values cfg.addReader( { config:"default value" }); //add stage parameters as values FlashVars: config:"flashvar value" cfg.addReader( stage.loaderInfo.parameters ); trace("config: " + cfg.g("config")); //long version: cfg.getSetting //Output: config: flashvar value //.... //Later on an xml get loaded var xml:XML = new XML("&lgt;root><setting id='config'>xml value</setting><root>"); cfg.addReader(xml); trace("config: " + cfg.g("config")); //Output: config: xml value
Ändern zur Laufzeit
Die Konfiguration kann zur Laufzeit verändert werden ohne die originalen Daten zu verändern.
var cfg:Fcfg = Fcfg.getUniqueInstance(); //initialize application default values cfg.addReader( { config:"default value" }); cfg.s("config", "overriden value"); //long version: cfg.setSetting trace("config: " + cfg.g("config")); //Output: config: overriden value //now lets remove the setting cfg.r("config"); //long version: cfg.removeSetting trace("config: " + cfg.g("config")); //Output: config: default value
Kettenstruktur
Im den vorigen Beispielen sieht man, dass die Konfiguration eine Strutkur von mehreren Readern/Writern ist.
Aufbau:
- Default Value Reader (Object Reader/Writer)
- Stage Params Reader (Object Reader/Writer)
- XML Config Reader (XML Reader)
- Default Modifier (Object Reader/Writer)
cfg.setSetting(“config”,”value”); hat hier den vierten Punkt editiert. Die Kette wir von Unten (4) nach Oben(1) abgearbeitet. Das Value des ersten Readers, der die Config ID (“config”) beinhaltet, wird genommen.
Beim editieren wird der defaultModifier genommen. Dieser ist mit einer gewissen Priorität (20) gespeichert. Bei einem Modifier kann man Werte editieren und löschen.
Der Object Reader/Writer kann dies standardmässig.
Events
Bei Änderungen an Konfigurationseinträgen werden Events dispatched. Fcfg selbst ist ein IEventDispatcher und unterstützt damit die gänigen AS3 Events.
public function sample4():void { var cfg:Fcfg = Fcfg.getUniqueInstance(); cfg.addEventListener(FcfgEvent.SETTING_CHANGED, cfg_changed); cfg.setSetting("config", "modified setting"); } private function cfg_changed(e:FcfgEvent):void { trace("changed: ", e.id, e.newValue, e.oldValue); //Output changed: config,modified setting,null }
Multiton
Um den Zugriff zu zentralisieren und vereinfachen steht ein Multiton in der Fcfg bereit. Somit ist der Zugriff auch auf statischer Ebene möglich.
var cfg:Fcfg = Fcfg.getUniqueInstance(); //unique generated name cfg.configName; //stored name, can be recalled with this var namedCfg:Fcfg.getInstance("myConfig"); var otherContextCfg:Fcfg = Fcfg.getInstance("myConfig"); //otherContextCfg and namedCfg reference to the same object
Links
- Projektseite: http://code.google.com/p/fcfg
- Getting started: http://code.google.com/p/fcfg/wiki/GettingStarted
Like it?














