Nous avons un site Web basé sur Django pour lequel nous voulions rendre une partie du contenu (texte et logique métier tels que les plans tarifaires) facilement modifiable en interne , et nous avons donc décidé de le stocker en dehors de la base de code. Habituellement, la raison est l'une des suivantes:
C'est quelque chose que les non-techniciens veulent modifier. Un exemple est la rédaction pour un site Web - les programmeurs préparent un modèle avec du texte par défaut "Lorem ipsum ...", et le contenu réel est inséré plus tard dans la base de données.
C'est quelque chose que nous voulons pouvoir changer rapidement, sans avoir à déployer de nouveau code (ce que nous faisons actuellement deux fois par semaine). Un exemple serait les fonctionnalités actuellement disponibles pour les clients à différents niveaux de tarification. Au lieu de les coder en dur, nous les lisons dans la base de données.
La solution décrite est flexible mais il y a quelques raisons pour lesquelles je ne l'aime pas.
Étant donné que le contenu doit être lu à partir de la base de données, il existe une surcharge de performances .
Nous atténuons cela en utilisant un schéma de mise en cache, mais cela ajoute également une certaine complexité au système.
Les développeurs qui exécutent le code localement voient le système dans un état sensiblement différent par rapport à la façon dont il s'exécute en production. Les tests automatisés exercent également le système dans un état différent. Des situations telles que le test de nouvelles fonctionnalités sur un serveur de transfert deviennent également plus délicates - si le serveur de transfert n'a pas de copie récente de la base de données, elle peut différer de façon inattendue de la production.
Nous pourrions atténuer cela en validant occasionnellement le nouvel état dans le référentiel (par exemple en ajoutant des migrations de données), mais cela semble être une mauvaise approche. C'est ça?
Des idées sur la meilleure façon de résoudre ces problèmes? Existe-t-il une meilleure approche pour gérer le contenu que je néglige?