Bonjour cher forum,

Je suis enseignant en école primaire et j’ai commencé l’apprentissage de la programmation en autodidacte depuis presque deux ans afin de mener à bien un projet perso.
Aujourd’hui mon projet avance comme je le souhaite et malgré des hauts et des bas, je sens que je continue à progresser et que mon projet finira par voir le jour. Seulement j’ai le sentiment que les bases de mon programme ont besoin d’être revues sans quoi je risque d’être embêté plus tard si je souhaite le faire évoluer.
Je me pose donc la question d’une révision complète de tout ça et il me vient quelques questions de conception générale auxquelles une personne plus expérimentée que moi saura sans doute répondre.

Quelques détails avant de commencer :
- Je programme avec Python et utilise Django. Je bricole à côté en html, css (Bootstrap) et js (jquery).
- Mon projet consiste en la création d’un petit site web sans prétention proposant des « aventures » à jouer en classe de type Escape Game ou chasse au trésor (avec énigmes, lectures, réinvestissement des compétences travaillées en classe…) avec un aspect RP supplémentaire (création d’un personnage avec des compétences).

Les questions existentielles :

La création d’applications :
J’ai appris que les applications regroupaient tous les éléments gravitant autour de mêmes modèles. J’ai donc fait :
- une application pour la navigation générale sur le site et la gestion des utilisateurs.
- une application pour la gestion des aventures.
C’est la seconde application qui m’interroge. J’ai l’impression qu’y mettre toutes mes aventures (actuellement au nombre de 0 du coup c’est pas trop problématique en ce moment ) risque de créer une grosse bdd et d’y compliquer ainsi mes requêtes.
Même si les modèles resteront les mêmes d’une aventure à l’autre, n’est-il pas plus simple de séparer les tables en créant à chaque fois une nouvelle application ?
Ainsi je pourrais créer une copie d’une application témoin pour chaque création d’une nouvelle aventure, dans laquelle je créerai les instances spécifiques.
Ou existe-t-il un moyen de travailler sur une même application mais en séparant clairement les aventures ?

Le lancement d’une aventure :
Une aventure comprend un mini univers avec les héros, des lieux et des interactions. Tous seront définis en tant qu’instances dans mes modèles. Les instances peuvent évoluer lors de l’aventure (bonus/malus de caractéristique, lieux qui devient accessible…), ces changements ne doivent bien sûr pas modifier la base de données initiale de l’aventure.
Mon programme actuel :
Je crée pour chaque session d’aventure une liste des effets (bonus, accès…) que j’interroge systématiquement dès que je recherche une information.
Exemple : je souhaite récupérer la valeur « logique » d’un héros
1) Je récupère la valeur initiale du héros.
2) J’interroge ma liste pour voir s’il ne dispose pas d’un bonus ou un malus.
3) J’additionne le tout.
Et cela de nombreuses fois pour chaque vue, puisque j’ai besoin de récupérer plusieurs données. Mon programme n’est certes pas optimisé du tout, mais j’atteints quand même 7-8s de chargement par moment.
Une autre idée :
Je copie l’ensemble des instances que je peux ensuite directement modifier. Je garde toujours une liste des effets à appliquer ou à annuler plus tard dans la partie, que j’interroge à chaque tour pour mettre à jour les données.
Il me semble que ça réduirait considérablement le nombre de requêtes, mais augmenterait significativement la taille de la bdd. Même si à la fin de chaque aventure, je garde les stats et peux supprimer la copie.

Les modèles :
- Vaut-il mieux un gros modèle passe-partout avec beaucoup de données vides ou inutiles la plupart du temps, ou plusieurs modèles spécifiques avec des relations ?
- Vaut-il mieux utiliser le système d’héritage quand c’est possible ou bien les relations génériques ? J’ai lu quelque part que le système d’héritage n’était pas toujours fiable.


Voilà, si je pouvais avoir quelques pistes sur ces différents points ce serait une grande aide pour moi !

Merci beaucoup à ceux qui m’ont lu.