Domanda

In grandi e complessi prodotti software di gestione impostazioni configurabili diventa un grande dolore. Due approcci che ho visto al problema sono:

  • ha ogni componente del sistema di carico la propria configurazione dal file di configurazione o le impostazioni del Registro.
  • avere una classe impostazioni loader che carica tutte le impostazioni di sistema configurabili e hanno ciascuna query componente il caricatore impostazioni per le sue impostazioni.

Questi approcci entrambi sentono sbagliato per me.

Ci sono modelli di progettazione che potrebbero essere utilizzati per semplificare il problema? Forse qualcosa che sarebbe sfruttare la tecnica di iniezione di dipendenza.

È stato utile?

Soluzione

Io preferisco creare un'interfaccia per l'impostazione di query, il caricamento e il salvataggio. Utilizzando iniezione di dipendenza, posso iniettare questo in ogni componente che richiede.

Questo permette flessibilità in termini di sostituzione della strategia di configurazione, e fornisce una base comune per tutto ciò su cui lavorare. Preferisco questo ad un unico, globale "Impostazioni loader" (la vostra opzione 2), soprattutto perché posso ignorare il meccanismo di configurazione di un singolo componente se ho assolutamente bisogno di farlo.

Altri suggerimenti

Attualmente lavoro su un sistema in cui la configurazione è gestita da un oggetto Singleton globale che mantiene una mappa di chiavi di configurazione ai valori. In generale, vorrei che non era stato fatto in questo modo perché può causare colli di bottiglia di concorrenza nel sistema ed è sciatto per unit testing, ecc.

Credo Reed Copsey ha il diritto di esso (lo ho votato su), ma consiglio vivamente la lettura di grande articolo di Martin Fowler su iniezione di dipendenza:

http://martinfowler.com/articles/injection.html

Una leggera addendum troppo ... se si vuole fare qualsiasi tipo di oggetto unit testing finto, l'iniezione di dipendenza è sicuramente la strada da percorrere.

Come su questo. Si definisce un'interfaccia configurabile con un singolo metodo configure (configurazione). L'argomento configurazione è semplicemente una tabella hash che associa i nomi dei parametri di configurazione con i loro valori.

oggetti Root in grado di creare una tabella hash di configurazione in qualunque modo che vogliono (es: la lettura da un file di configurazione). Questa tabella hash può contenere parametri di configurazione del iselft oggetto principale, più qualsiasi parametro che uno dei suoi componenti, sub-componenti, sub-sub-componenti (ecc) potrebbero usare.

Scopo principale quindi richiama configurazione (configurazione) su tutte le sue componenti configurabili.

È possibile creare più implementazione di un'interfaccia che definisce il caricatore config. Fondamentalmente modello di strategia in cui è possibile definire un'interfaccia di base come configLoader e poi ulteriormente diverse implementazioni, come FileSystemLoader, ClasspathLoader, EnvVariablesLoader etc. Dettagli di questo link

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