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 886
    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 170
    J'aime reçus:
    344
    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:
    428
    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 886
    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
RM Console, nouvel outil SEO (suivi, insights) Référencement Google Hier à 14:58
Nouvelle mouture de mon site... Demandes d'avis et de conseils sur vos sites Jeudi à 19:00
Retour expérience CMP et choix Administration d'un site Web 2 Août 2022
Publish center en brouillon Référencement Google 1 Août 2022
Matomo visites à zéro depuis deux jours. Administration d'un site Web 28 Juillet 2022
Lien dofollow ou nofollow vers pages noindex ? Débuter en référencement 28 Juillet 2022
Refonte de site ou nouveau site pour repartir sur de bonnes bases ? Débuter en référencement 27 Juillet 2022
nouvelle extension de domaine ou sous domaine ? Noms de domaine et référencement 26 Juillet 2022
Données structurées 'person' et 'organization' à mettre sur toutes les pages du site ? Référencement Google 24 Juillet 2022
Une aide pour une fonction récursive... Développement d'un site Web ou d'une appli mobile 18 Juillet 2022
Désindexé de Bing du jour au lendemain Problèmes de référencement spécifiques à vos sites 16 Juillet 2022
Freendi.com - recrutement et média autour du télétravail Demandes d'avis et de conseils sur vos sites 12 Juillet 2022
Deux noms de domaines pour deux sections d'un même site ? Débuter en référencement 11 Juillet 2022
Trafic qui chute malgré tous mes efforts Problèmes de référencement spécifiques à vos sites 9 Juillet 2022
Un iframe compte-il pour 1 backlink ou pour plusieurs Débuter en référencement 8 Juillet 2022
Forums et réseaux sociaux, incontournables ? Débuter en référencement 5 Juillet 2022
Redirect 410 HTACCESS pour toutes les pages d'un répertoire URL Rewriting et .htaccess 1 Juillet 2022
On me propose du netlinking pour monter TF/30 et DA/50 Netlinking, backlinks, liens et redirections 30 Juin 2022
Hébergeur pour streaming de petits fichiers audios Administration d'un site Web 29 Juin 2022
Pourquoi mon menu disparait sur mobile ? Développement d'un site Web ou d'une appli mobile 24 Juin 2022