Abbiamo un sito Web basato su Django per il quale volevamo rendere parte del contenuto (testo e logica aziendale come i piani tariffari) facilmente modificabili internamente , quindi abbiamo deciso di archiviarlo al di fuori della base di codice. Di solito il motivo è uno dei seguenti:
È qualcosa che le persone non tecniche vogliono modificare. Un esempio è il copywriting per un sito Web: i programmatori preparano un modello con testo che per impostazione predefinita è "Lorem ipsum ..." e il contenuto reale viene inserito successivamente nel database.
È qualcosa che vogliamo poter cambiare rapidamente, senza la necessità di distribuire un nuovo codice (cosa che attualmente facciamo due volte a settimana). Un esempio potrebbero 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 sovraccarico di prestazioni .
Lo mitigiamo 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 significativamente diverso rispetto a come viene eseguito in produzione. I test automatizzati esercitano anche il sistema in uno stato diverso. Anche situazioni come testare nuove funzionalità su un server di gestione temporanea diventano più complicate: se il server di gestione temporanea non ha una copia recente del database, può essere inaspettatamente diverso dalla produzione.
Potremmo mitigarlo affidando il nuovo stato al repository di tanto in tanto (ad esempio aggiungendo migrazioni di dati), ma sembra un approccio sbagliato. È?
Qualche idea su come risolvere al meglio questi problemi? Esiste un approccio migliore per gestire il contenuto che sto trascurando?