Domanda

Sto lavorando al refactoring del codice della parte di caricamento del file di configurazione in PHP.In precedenza utilizzavo più file "ini", ma ora ho intenzione di utilizzare un singolo file XML che conterrà tutti i dettagli di configurazione del progetto.Il problema è che se qualcuno vuole il file di configurazione in ini o DB o qualsiasi altra cosa e non quello predefinito (in questo caso XML), il mio codice dovrebbe gestire quella parte.

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

È stato utile?

Soluzione

Supponendo che tu voglia utilizzare una classe per gestire tutto questo, hai 3 opzioni:

  1. Avere una classe base chiamata qualcosa del tipo, ReadConfigurationBase quindi 3 classi di implementazione, ReadConfigurationXML, ReadConfigurationINI, E ReadConfigurationDatabase e dovresti scegliere quello giusto
  2. Come sopra, ma utilizzando una fabbrica per scegliere, in base a qualcosa trasmesso.Metti mi piace se passi config.xml saprebbe ritornare ReadConfigurationBase implementato utilizzando ReadConfigurationXML
  3. Chiedi una lezione ReadConfiguration e funziona come il passaggio 2, ma crea, contiene e possiede le altre 3 classi.

Le 3 classi non base saprebbero semplicemente come leggere quel tipo di file di configurazione e restituire le informazioni in modo generico.pensare sulla falsariga di un'interfaccia:Sai che puoi ottenere i dati, ma non ti interessa come.

Suggerirei l'opzione 3, poiché renderebbe la vita più semplice.Dovresti apportare piccole modifiche ogni volta che desideri aggiungere un metodo di archiviazione, ma ciò significherebbe semplicemente aggiungere un po' al ReadConfiguration classe.

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

Altri suggerimenti

Dai un'occhiata alla Zend_Config . Esso fornisce gli adattatori per Array, Xml e Inis. Come tutti i componenti di Zend Framework, esso può essere utilizzato isolata dal quadro rimanente. Anche se non si desidera utilizzarlo, è ben progettato e si potrebbe ottenere un paio di idee per il proprio gestore di configurazione da esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top