Bonjour à tous.
Je galère depuis pas mal de temps sur un projet personnel. Celui-ci est tout bête, vraiment. Mais en fait une fois posé en termes d'objets c'est une horreur. Je n'arrive pas à m'en sortir.
En quoi consiste le projet: On se connecte sur mon site, et on trouve un tableau de 100 cases (numérotées de 0 à 99. Ça ne changera jamais ni dans le temps, ni selon l'utilisateur). Dans chacune de ces cases, figurent plusieurs mots (chaque mot ne peut appartenir qu'à une case). Ces mots sont les mêmes pour tous les utilisateurs. L'utilisateur peut choisir un mot par case (parmi les mots disponibles), et constituer au final un tableau personnalisé. Les mots sont disponibles pour tout le monde, mais chacun peut faire la combinaison qui l'intéresse et la sauvegarder. En plus de cela, un utilisateur peut proposer à l'administrateur un mot à intégrer dans une case.
Le Problème: Mon projet est tout bête. Mais je galère à mort pour tout ce qui est structure des objets. J'ai essayé plusieurs fois de trouver quelque chose de bien (parfois avec de l'aide sur IRC) mais je n'ai jamais réussi à trouver un truc qui tienne la route. Je sais qu'il me faut absolument une entité User et une entité Word. Pour le reste c'est le flou.
Pour l'instant je suis parti sur une entité User, une entité Word et une entité Number (pour la case). Pas d'entité Table ou autre. Mais mon code est à modifier complètement puisque là j'atteins un niveau de requêtes hallucinant (202 requêtes MySQL sur la page pour modifier le tableau...). Donc le form pour modifier le tableau personnel n'est pas un formType basé sur un objet, mais un truc très sale fait de requêtes personnalisées. Tous les mots sont sauvegardés par itération pour chaque case. C'est très sale, intenable et extrêmement lent. Je vais donc devoir refonder entièrement mon code, et je cherche à ce que ce soit propre et relativement efficace (en terme de temps de réponse).
Difficultés précises :
- Dois-je créer une entité Number, ou dois-je seulement créer un attribut de type int dans Word ? Est-ce qu'utiliser une entité ne serait pas plus logique étant donné que ce sont les 100 mêmes qui reviennent toujours? Par ailleurs chaque numéro a des explications sur le type de mots qu'il contient. J'ai donc fait un attribut $rules de type "text" dans l'entité Number. Si je n'ai pas d'entité Number, où je place mes règles les concernant? Une entité Rules avec un attribut int $number?
- Dois-je créer une entité Table ou dois-je simplement stocker les mots choisis dans un attribut $words de l'utilisateur, avec vérification (et suppression le cas échéant) qu'il n'y a pas déjà un mot pour la case, le tout réalisé dans le contrôleur ?
- On m'a proposé de faire un serialize pour hasher le tableau et le ressortir ensuite. Cependant est-ce que ce n'est pas à éviter, étant donné que des mots peuvent être supprimés ou édités ?
- Comment réaliser le formulaire de modification du tableau ? Pour l'instant j'ai réalisé ça de façon sale directement dans le contrôleur (aoutch). Dois-je faire une collection de formulaires ou un seul gros form? Mon formType sera t-il basé sur une classe (WordType?) ou aura t-il un data_class null ?
Voilà un peu les questions que je me pose et les difficultés auxquelles je suis confronté... En réalité ça fait plusieurs mois que je cherche une solution viable (pas à temps plein, mais bon). Donc si vous avez des idées, n'hésitez surtout pas.
Merci beaucoup par avance
Partager