Abbiamo un sito web basato su Django per il quale abbiamo voluto rendere alcuni dei contenuti (testo e business logic come i piani tariffari) facilmente modificabili in-house , e così abbiamo deciso di archiviare fuori dalla base di codice. Di solito il motivo è uno dei seguenti:
-
È qualcosa che persone non tecniche desidera modificare. Un esempio è il copywriting per un sito Web: i programmatori preparano un modello con testo predefinito "Lorem ipsum ..." e il contenuto reale viene inserito successivamente nel database.
-
È qualcosa che vogliamo essere in grado di modificare rapidamente, senza la necessità di distribuire nuovo codice (che attualmente facciamo due volte a settimana). Un esempio potrebbe essere le funzionalità attualmente disponibili per i clienti a diversi livelli di prezzo. Invece di codificarli, li leggiamo dal database.
La soluzione descritta è flessibile ma ci sono alcuni motivi per cui non mi piace.
-
Poiché il contenuto deve essere letto dal database, esiste un overhead delle prestazioni .
La attenuiamo utilizzando uno schema di memorizzazione nella cache, ma ciò aggiunge anche una certa complessità al sistema.
-
Gli sviluppatori che eseguono il codice localmente vedono il sistema in uno stato diverso in modo significativo rispetto a come viene eseguito sulla produzione. I test automatici inoltre esercitano il sistema in uno stato diverso. Anche situazioni come testare nuove funzionalità su un server di staging sono più complicate: se il server di staging non ha una copia recente del database, può essere inaspettatamente diverso dalla produzione.
Potremmo attenuarlo inserendo occasionalmente il nuovo stato nel repository (ad es. aggiungendo migrazioni di dati), ma sembra un approccio errato. È?
Qualche idea sul modo migliore per risolvere questi problemi? C'è un approccio migliore per gestire il contenuto che sto trascurando?