Où fixez-vous vos limites avec POO ? Dénormalisation.

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par dorian53, 19 Mai 2012.

  1. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 909
    J'aime reçus:
    1
    Bonjour,

    Etes-vous plutôt full POO ou adepte de la dénormalisation ? Et comment ?

    Prenons le cas de la gestion d'un utilisateur, vous allez certainement gérer une classe User (liée à votre table en bdd).

    Code:
    User
    - id
    - nom
    - prenom
    - sexe_id
    ...
    Pour l'exemple, je souhaite m'attarder sur l'attribut sexe_id.
    Au niveau d'une conception SGBDR, le sexe_id correspond à une clé étrangère.

    1/ Allez-vous créer cette table sexe avec seulement deux valeurs ?
    2/ Allez-vous créer cette classe sexe ?
    3/ Comment allez-vous créer la méthode findAll de votre DAO Sexe ?
    - Va-t-il se connecter à un SGDBR
    - Va-t-il retourner deux entités Sexe ou un tableau en dur
    ...

    Code:
    Sexe
    - id
    - nom
    
    DAO_Sexe
    - findAll()
    
    Cet attribut est un exemple parmi tant d'autres.

    Merci pour vos retours.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 176
    J'aime reçus:
    327
    1) Non, c'est juste M ou F, je vois pas trop l'intérêt.
    2) Non plus.
    3) Vu que je crée pas de modèle spécifique (Sex). Pour la traduc ou autres besoins, je le défini tt simplement comme ceci:
    PHP:
    <span class="syntaxdefault"><br />$sex&nbsp;</span><span class="syntaxkeyword">=&nbsp;array(</span><span class="syntaxstring">'M'&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">__</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Homme'</span><span class="syntaxkeyword">),&nbsp;</span><span class="syntaxstring">'F'&nbsp;</span><span class="syntaxkeyword">=>&nbsp;</span><span class="syntaxdefault">__</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Femme'</span><span class="syntaxkeyword">));<br />&nbsp;</span><span class="syntaxdefault"></span>
    Et pour les find:
    PHP:
    <span class="syntaxdefault"><br />$femaleUsers&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">User</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">findAllBySex</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'F'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$maleUsers&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">User</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">findAllBySex</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'M'</span><span class="syntaxkeyword">);<br />&nbsp;</span><span class="syntaxdefault"></span>
    (Sachant que j'utilise CakePHP)
     
  3. chtipepere
    chtipepere WRInaute occasionnel
    Inscrit:
    8 Janvier 2004
    Messages:
    449
    J'aime reçus:
    0
    Bonsoir,
    Malheureusement, le "genre" d'un utilisateur est un cas particulier.
    Il n'y a aucun intérêt à utiliser une clé étrangère, un enum suffira largement.

    Par contre, pour une valeur du type : "ville de naissance", "avatar par défaut", tu pourrais avoir besoin d'une clé étrangère provenant d'une table secondaire.
    Tu pourrais accéder à ces valeurs via un ORM en utilisant ce genre de code :
    Code:
    echo UsrTable::getInstance()->getCity()->getName();
    getCity étant un accesseur à la table city, qui possède un champ name.

    Si tu utilises un ORM, les classes nécessaires seront générées automatiquement (avec doctrine par exemple), les accesseurs et les "setteurs" existeront aussi automatiquement (très proche de la syntaxe cake PHP du dessus).
     
  4. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 909
    J'aime reçus:
    1
    Merci pour vos réponses.

    OK pour l'ORM chtipepere, tout ça est parfaitement clair, c'est justement contre cette lourdeur d'implémentation que j'essaie de débattre. Jusqu'où faut-elle la suivre ? Et si on ne la suit pas comment gérer cette désorganisation ?

    Nous sommes d'accord que cette table sexe ne sert à rien :
    - faut-il virtualiser la classe coté code (avec un objet à deux attributs tout aussi inutile),
    - faut-il dériver sur du code à plat (avec un tableau comme spout)...

    Je suis aussi sensible aux conventions qu'à l'optimisation des performances, d'où mon dilemme.
     
Chargement...
Similar Threads - Où fixez limites Forum Date
URL image située sur un autre site ou sous-domaine YouTube, Google Images et Google Maps Vendredi à 11:22
Mettre tout les mots de son titre dans l'url? Rédaction web et référencement Jeudi à 14:51
[avis] Mygreencloud Rédaction web et référencement Mercredi à 16:45
Astuce Quels sont les pratiques optimales pour intégrer Adsense ou autre Monétisation d'un site web 13 Septembre 2021
Je cherche un framework pour PWA Développement d'un site Web ou d'une appli mobile 11 Septembre 2021
Lien vers un plan du site sur toutes les pages : utilité? Débuter en référencement 10 Septembre 2021
Gestion sous domaines et domaines dans Analytics Google Analytics 10 Septembre 2021
WordPress Pourquoi mon site ne remonte pas ? Débuter en référencement 8 Septembre 2021
Google Search console: page envoyée et indexée mais introuvables via site: Référencement Google 7 Septembre 2021
Stratégie d'enchère Google Ads : conversion ou CPC ? AdWords 7 Septembre 2021