Bonjour à tous !
Dans le cadre d'un projet personnel, avec plusieurs amis, nous sommes en train d'établir la conception d'un site internet de jeux vidéo. Il s'agit pas d'une question connue, je ne parle pas ici d'erreur ou quoi que ce soit d'où le fait que je vous demande conseil ici. Nous n'avons pas non plus l'expérience requise pour répondre à cette question.
Le contexte
Je vais donc commencer par expliquer un peu le site internet. Il y aura des membres, et d'autres objets divers. Certains objets pourront être "Followable", "Likable" et "Linkable". Je m'explique.
- Un jeu, un studio, etc. pourront par exemple être Followable. C'est à dire que les membres pourront le suivre. Cela permettra plusieurs fonctionnalités associées. On veut donc connaitre depuis un membre les objets qu'il a aimé (Jeu, Studio, etc.) Et de chaque objet on veut connaître les Membres qui le suivent (Je veux savoir qui suit le studio "Naughty Dog" ou le jeu "Halo 4").
- Un jeu, un studio, un média, et beaucoup plus de choses pourront être Likable. C'est à dire que les membre pourront l'aimer. Là aussi, si possible, on aimerait savoir ce qu'un utilisateur aime, et pour un objet quels sont les utilisateurs qui l'aime.
- Un jeu, un studio, etc. pourront être Linkable. Ici, il ne s'agit pas de relier ces objets avec des membres mais avec d'autres objets (pour le moment Article et Média). Par exemple, un média (une vidéo, une image) ou encore un article peut s'"associer" avec un objet dit Linkable. Ainsi, un média peut avoir plusieurs "Objets associés". Ceci signifie que pour un média donné, on peut associer un ou plusieurs jeux, plusieurs studios, ou tout objet dit "Linkable".
Nombre d'associations créées
Chaque objet dit "Likable" doit être relié avec Membre, puisqu'un membre peut aimer cet objet.
Chaque objet dit "Followable" doit être relié avec Membre, puisque là aussi un membre peut suivre cet objet.
Chaque objet dit "Linkable" doit être relié avec chaque objet qu'on peut "linké" à ces objets dits Linkable.
Soit n objets Likable, m objets Followable, p objets Linkable et q objets qu'on peut linké. On a donc n + m + p*q associations créées. Je sais pas trop comment expliquer pour le moment, donc si vous comprenez pas bien dites-le moi, j'essaierai d'expliquer mieux.
Solutions envisagées
La première, la solution triviale, est une très mauvaise solution. Il s'agirait de créer chacune de ces relations en brut. Cela implique forcémment de la redondance dans le code.
La deuxième solution consisterait à créer 3 interfaces : Likable, Followable et Linkable et à faire implémenter ces interfaces si les objets sont Likable, Followable ou Linkable. Ex : Jeu implements Likable, Followable, Linkable ou Media implements Likable.
Une troisième solution serait de pouvoir créer des extensions Doctrine, mais je ne sais pas si cela est possible puisqu'il s'agit là d'associations et j'ai aucune idée de s'il s'agit d'une bonne solution ou pas.
Bref, si vous avez une idée d'une meilleure solution, qui prenne en compte le fait d'avoir une base de donnée moindre, et de pas dupliquer le code (formulaire, contrôleurs, etc.), alors je serais ravi de la connaître =)
Si vous savez, merci ! Et bonne soirée à vous.
Si vous savez pas, bonne soirée à vous quand même !
Partager