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

ORM PHP Discussion :

inheritance Colum_aggregation vs Concrete


Sujet :

ORM PHP

  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut inheritance Colum_aggregation vs Concrete
    bonjour,
    j' ai besoin de gérer un ensemble d'objet (asset) pour un utilisateur.
    Chaque asset à des champs communs et certains ont des champs particuliers.
    exemple:
    User a un n° de télephone XXXX et un PC qui est un laptop marqueX modeleW

    j'ai a la fois besoin d'avoir une vue synthétique de l'ensemble des asset pour une persone:
    user1:
    N° de telephone
    PC

    et une vue en détails:
    PC de user 1: laptop, marqueX modeleW

    pour cela j'ai tester l'inheritance de Doctrine.
    Si au niveau visualisation le modele Column_aggregation me convient ( un generate-admin asset me donne une vue complete et un generate-admin pc me donne que les PC).
    cela charge tout dans une même table, d’où des champs qui servent à rien pour beaucoup de ligne et une table énorme.
    Si le modèle Concrete sépare les données dans des tables différentes je n'ai pas trouvé le moyen d'avoir la vue synthétique.
    un generate admin asset me donne une liste vide.

    Y a t il moyen avec le modèle concrete d'obtenir cette vue synthétique ?

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je ne pense pas qu'un héritage soit adapté à ton problème.

    Pose ton schéma (MLD) tu devrais trouver des solutions plus appropriées.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    en gros, pour un profil utilisateur, je gére un ensemble de 'bien', bien qui peut être physique (un PC) ou virtuel (compte mail, Id windows...).
    Derrière chacun de ces biens je gère des données spécifiques et quelque fois un historique d'utilisation (ex, compte mail historique de taille).

    Bien entendu l'ensemble de ces données viennent de fichier différents que j'ai besoin de croiser.
    en objet, je dirait que j'ai un objet Asset avec un nom, un propriétaire.
    et des objets PC, Tel, Compte mail, qui hérite de l'objet Asset.

    Et pour un propriétaire j'ai besoin d'avoir l'affichage de l'ensemble de ces assets.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Donc tu as une table utilisateurs et une table biens...

    Je vois trois possibilités pour gérer ton problème.

    1) tu peux créer des héritages de la tables biens pour chaque type de bien. Ceci limite le nombre de type possible, charge la table et rend la création d'un nouveau bien difficile (il faut reprogrammer pas mal de choses).

    2) tu peux utiliser un ensemble de table, une table propriétés des bien avec le num du lien, le type de propriété et la valeur, il faudra compléter par une table des types de biens et des propriétés gérées suivant le type avec éventuellement des paramètres à utiliser dans les form de saisie.

    3) tu peux utiliser un champ propriété dans lequel tu vas parser les propriétés. On est très proche de la solution 1 avec moins de contraintes au niveau de la taille (nombre de champs) de la table.

    Perso, je pense que la solution la plus souple est la 2, l'héritage de tables ne permettant pas de gérer simplement la modification ou la création d'un nouveau type.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    j'ai aussi pensé à la solution 2, sauf que si au niveau modèle, c'est la moins contraignante, elle ne permet pas de profiter des aides de symfony. Il faudra créer presque à la mano les modules par type, et tout les getPropriétes().

    j'ai initialement choisi la solution de l’héritage du fait que, d'un part mon nombre de type de bien ne bougera pas beaucoup et que cela me permet de profiter pleinement de la puissance de symfony.

    En ayant une table abstraite Bien, je peut générer un module admin pour y lister tout les Biens avec leur propriétés communes.
    En héritant de cette table les types de bien, je peut générer un module admin par type de bien.
    L'ajout d'un type ne pose pas vraiment de problème, puisque j'ai juste a créer une table fille de Bien et a générer le module admin.
    Seul bemol, c'est qu'avec l'option Column Aggregation, cela ne me crée qu'une table Biens et donc si je rajoute un type je devrai modifier puis recharger cette table. Mais bon avec un ALTER ça devrait le faire.

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je reste convaincu que la deuxième méthode est la meilleur.

    Non, il ne faut rien créer "à la mano", il faut une table des types de propriétés qui va avoir les champs, type, validateur et autres. L'écran va se contenter de puiser dans cette table pour ce créer.

    Quant au modification de structure de table sur une table existante, elle sont prise en charge dans le fonctionnement applicatif de symfony. Il faut utiliser les notions de migrate. Ce qui implique plusieurs version des tables et l'écriture d'un code spécifique pour les commandes sql.

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/03/2009, 16h24
  2. Réponses: 9
    Dernier message: 27/03/2005, 23h29
  3. [Single Table Inheritance] Documentation
    Par seb_asm dans le forum Design Patterns
    Réponses: 2
    Dernier message: 10/03/2005, 13h18
  4. Inherited et Fail
    Par WebPac dans le forum Langage
    Réponses: 12
    Dernier message: 14/09/2004, 13h09
  5. [Conception][Factory] Packages inheritance
    Par ludovic.fernandez dans le forum Général Java
    Réponses: 5
    Dernier message: 05/07/2004, 17h02

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