Sto scrivendo un'applicazione PHP, seguendo i principi di sviluppo basati sui test.
Voglio due diverse configurazioni: una per lo sviluppo e una per la produzione.
Espanderò continuamente le funzionalità dell'applicazione, quindi un problema è che non voglio che le credenziali / la configurazione di produzione vengano sovrascritte ogni volta che carico un aggiornamento. Questa è solo una euristica. E potrebbe essere fatto in 100 modi diversi. Non riesco a vedere il legno per gli alberi, ho bisogno di aiuto!
Esempio 1: l'applicazione si interrompe con l'API di Ebay. Per l'applicazione per autenticarsi con Ebay, è necessario inviare le chiavi di autenticazione. Ma avrò bisogno di due set di chiavi: una per lo sviluppo nella sandbox di Ebay e un'altra per la produzione. Alla fine, questi saranno archiviati in un database o simili, poiché scadono e necessitano di essere rinnovati, ma fingono che non sia il caso - assumono che sono statici.
Esempio 2: host, nome e credenziali del database che sarebbero diversi in fase di test e produzione
Ho difficoltà ad articolare la mia domanda. In breve, voglio seguire le migliori pratiche del TDD.
Il mio istinto sarebbe di avere un file di configurazione che viene letto da qualche classe. Questo offre due opzioni:
- O ci sarebbero due file, uno per i test e uno per la produzione, o
- un solo file di configurazione, il cui contenuto verrebbe modificato per la produzione.
Ma diciamo che scegliamo l'opzione 1, torniamo al punto di partenza, perché da qualche parte ci deve essere un'impostazione che dice se questo è il test o l'ambiente di produzione.
E diciamo che scegliamo l'opzione 2, la posizione del file avrebbe ancora bisogno (?) di essere codificata in modo difficile da qualche parte.
E poi c'è lo scenario in cui gli oggetti devono essere scambiati a seconda che si tratti di produzione o sviluppo. AFAIK il modello factory risolve questo problema, ma ancora, da qualche parte, il codice deve essere detto in quale ambiente ci troviamo e / o quale delle due classi usare.
Nei libri che ho letto, il principio che penso è di trattare l'applicazione come una cipolla, alimentando le informazioni di configurazione per l'applicazione in modo che l'intera applicazione sia indipendente dal contesto. Quindi, per uno strumento da riga di comando, la configurazione potrebbe essere fornita da argomenti della riga di comando. Ma come si potrebbe fare per un'applicazione Java Swing o un'app Web PHP?