2010-03-18 16 views
6

Sto lavorando al ridisegno del codice della parte di caricamento del file di configurazione in PHP. In precedenza stavo usando più file "ini" ma ora ho in programma di andare per un singolo file XML che conterrà tutti i dettagli di configurazione del progetto. Il problema è che se qualcuno vuole un file di configurazione in ini o DB o qualcos'altro e non quello predefinito (in questo caso XML), il mio codice dovrebbe gestire quella parte.Configuration manager per PHP

Se qualcuno vuole andare per un'altra opzione di configurazione come ini, dovrà creare file ini simile al mio file di configurazione XML e il mio Configuration Manager dovrebbe occuparsi di tutto come l'analisi, l'archiviazione nella cache. Per questo ho bisogno di un meccanismo, diciamo un'interfaccia corretta per i miei dati di configurazione in cui l'archivio dati sottostante può essere qualsiasi cosa (XML, DB, ini ecc) anche io non voglio che dipenda da questo archivio sottostante e in qualsiasi momento questo in futuro dovrebbe essere estensibile ad altri formati di file.

risposta

5

Supponendo che hai intenzione di utilizzare una classe per gestire tutto questo, avete 3 opzioni:

  1. hanno una classe di base denominata qualcosa di simile, quindi ReadConfigurationBase 3 classi di implementazione, ReadConfigurationXML, ReadConfigurationINI, e ReadConfigurationDatabase e che avrebbe dovuto scegliere quella giusta
  2. Idem come sopra, ma utilizzando una fabbrica di scegliere, in base al largo di qualcosa di passato. come se si passa config.xml che saprebbe di tornare ReadConfigurationBase implementati utilizzando ReadConfigurationXML
  3. Avere una classe chiamata ReadConfiguration e funge da passaggio 2, ma crea, contiene e possiede le 3 altre classi.

Le 3 classi non di base semplicemente sanno come leggere quel tipo di file di configurazione e restituiscono le informazioni in un modo generico. pensa lungo le linee di un'interfaccia: sai che puoi ottenere i dati, ma non ti importa come.

Suggerisco l'opzione 3, poiché renderebbe la vita più facile. Dovresti fare un po 'di modifiche ogni volta che vuoi aggiungere un metodo di archiviazione, ma aggiungerei un pochino alla classe ReadConfiguration.

C'è un modo per renderlo dinamico al 100%, ma ciò complicherebbe le cose, e non credo che ne abbia davvero bisogno per questo.

+0

+1 per mostrare come fai da te. –

+0

Grazie per la risposta. Puoi elaborare la terza opzione in più dettagli? – Jack

3

Dai un'occhiata allo Zend_Config. Fornisce adattatori per Array, Xml e Inis. Come tutti i componenti in Zend Framework, può essere utilizzato isolato dal Framework rimanente. Anche se non vuoi usarlo, è ben progettato e potresti ottenere alcune idee per il tuo gestore di configurazione.

+0

+1 per aver menzionato ZF. –

Problemi correlati