Perché così tante app / framework mantengono i loro file di configurazione in un formato non eseguito?

StackOverflow https://stackoverflow.com/questions/1642413

Domanda

Molti framework mantengono i loro file di configurazione in una lingua diversa dal resto del programma. Ad esempio, Appengine mantiene la configurazione in formato yaml. per confrontare, DJango settings.py è un modulo Python. Ci sono molti svantaggi che posso vedere con questo.

Se è nella stessa lingua del resto del programma, posso

Fai cose interessanti nel file di configurazione.

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • Non è necessario imparare un nuovo formato (certamente leggero)
  • I miei strumenti funzionano come previsto.
  • Posso semplicemente fare import conf ecc.

Posso vedere i vantaggi se fosse un linguaggio pesante come C / C ++ ecc., ma per Python perché ha senso. Sembra solo togliere il potere senza aggiungere alcun vantaggio.

È stato utile?

Soluzione

Alcuni progettisti di framework ritengono che i file di configurazione siano luoghi inappropriati per la logica pesante. Proprio come il framework MVC ti impedisce di mettere la logica dove non appartiene, il file di configurazione ti impedisce di mettere la programmazione dove non appartiene.

È una questione di gusti e filosofia.

Detto questo, preferisco il metodo di Django.

Altri suggerimenti

Python potrebbe non essere sempre l'unico linguaggio su cui gira l'appengine. Quindi lo stesso file di configurazione yaml potrebbe guidare un'app appengine scritta, ad esempio java o perl

A volte è necessario utilizzare uno strumento automatico / GUI per analizzare e / o generare e / o modificare un file di configurazione. Questo non è facile se il tuo conffile è uno script Python.

C'è un ottimo motivo: se il tuo programma è distribuito in un ambiente non sicuro, come il computer dell'utente, l'esecuzione di un file di testo che è così facile da modificare è la porta aperta a molti virus. Questo è meno il caso di un'applicazione Django in cui l'applicazione è ospitata sul server - un ambiente sicuro. Ma con un'applicazione distribuita su Windows usando py2exe, dovresti astenervi dal far eseguire al tuo programma cose casuali.

Un altro motivo per usare una sintassi come YAML è che puoi manipolare il file usando altri strumenti, anche altre lingue, il formato è portatile e abbastanza documentato.

Detto questo, quando ho bisogno di avere un file di configurazione con un programma Python, utilizzo un dizionario Python con alcune misure di sicurezza:

  • rimuovi l'allegato {} in modo che non valuti direttamente un'espressione python
  • utilizzo di safe_eval per scartare qualsiasi elemento eseguibile.

Probabilmente non gli è venuto in mente che potevano farlo. Molti programmatori sono dei vecchi tempi in cui i linguaggi di scripting erano lenti e non molto più semplici dei linguaggi di programmazione (basta guardare cose come le shell Unix). Quando sono arrivate belle lingue dinamiche, si sono semplicemente bloccati in " text solo file di configurazione " perché è quello che hanno sempre fatto.

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