IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Choix d'une meilleure conception


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Choix d'une meilleure conception
    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 !

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    J'ai du mal avec ta notion de Linkable.
    Je pense que cela va vite devenir ingérable dans le mesure où cette propriété risque de faire partir tes associations dans tous les sens (genre récursivité infinie).

    Dis toi bien que tu ne pourras pas suivre toutes les associations possibles entre les objets linkable.
    Je pense que tu devrais modifier ton approche. Au lieu de gérer des associations "possibles", il serait préférable de coder un moteur de recherche qui s'occuperait de dénicher ces associations à travers des mots-clés, recherches textuelles, sujets suivis par tes membres, leur historique...

    Ainsi ce moteur te produirait des suggestions de sujets corrélés autour d'un sujet central avec un certain niveau qualitatif en fonction d'un algorithme plus ou moins paramétrable.
    Gros travail en perspective mais c'est le prix à payer pour garder la souplesse nécessaire à ce que tu veux suivre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Salut,

    déjà, il ne devrait pas y avoir de récursivité infinie, car si une classe est "linkable", elle ne peut pas "linker".

    Après, créer un système de recherche pour ça n'est pas possible et trop lourd. Comment savoir qu'une vidéo parle de tel ou tel sujet, cela me semble impossible. (Car un média peut avoir des objets "linkable" associés).
    Je sais pas si j'ai bien compris ton idée mais à priori je pense pas qu'elle fera l'affaire non plus..

    Et de toute façon, même si on arrive à connaître les sujets dont parle tel ou tel article, on doit pouvoir les stocker car on veut savoir à partir d'un sujet (un jeu par exemple) quels sont les articles qui parlent de ce jeu, donc le stockage est aussi nécessaire.

    Merci d'avoir répondu !

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Naezys Voir le message
    déjà, il ne devrait pas y avoir de récursivité infinie, car si une classe est "linkable", elle ne peut pas "linker".
    Euh, ah bon j'avais pas compris tes explications comme ça.
    D'ailleurs pourquoi cette limitation ?

    Je voyais ton système plus comme ça :
    Ex: Media - Jeux - Membres - Articles
    Tu les mets dans l'ordre que tu veux. Il n'y a pas de hiérarchie entre à vrai dire que des liens.
    Chaque objet est rattachable et peut rattacher. Un système très ouvert.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    T'avais pas compris mes explications car c'était pas clair, excuse-moi ! ^^

    Alors c'est une limitation qui découle du besoin : Un article, tout comme un Média, parle d'un Jeu, d'un Studio ou d'une Console. Il ne parle pas d'un autre article (à la rigueur il peut afficher un Media, mais pas plus).

    Cela permet surtout d'avoir, pour un Jeu, la liste des Articles et Médias qui parlent de lui.
    Pour notre exemple, il y a donc 3 entités "linkable" : Jeu ; Studio ; Console (il y en a davantage dans le diagramme réel)
    Et 2 entités dont on peut associer des entités "linkable" : Article ; Media

    Ainsi, pour le coup, on devrait avoir 6 associations : Article-jeu, Article-studio, Article-console, Media-jeu, Media-studio, Media-console. Le but c'est de rendre ça automatique, on va pas s'amuser à la main à écrire autant d'associations (et de fonctions associées) qui sont, au final, toutes similaires (surtout que pour l'exemple il y a 6 associations mais au final il y en aura sûrement beaucoup plus).

    J'espère m'être mieux expliqué ce coup-ci !

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/01/2010, 21h11
  2. Choix de technos pour une meilleure productivité
    Par gside dans le forum Débuter
    Réponses: 4
    Dernier message: 25/06/2009, 11h22
  3. [ MAP ] Choix d'une MAP
    Par mawashee dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/08/2004, 16h39
  4. Choix d'une base de données
    Par maurice66 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 15/07/2004, 10h14
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo