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

Langage PHP Discussion :

principe de responsabilité limitée des classes : une ou deux classes ? [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 499
    Billets dans le blog
    1
    Par défaut principe de responsabilité limitée des classes : une ou deux classes ?
    Bonjour,

    étant débutant en POO, je me pose une question de conception à savoir si je dois créer une ou 2 classes.

    J'ai déjà créé la bdd (MySQL). La partie qui nous intéresse ici est modélisée par le MCD suivant :
    Nom : ownerlicence.png
Affichages : 128
Taille : 27,4 Ko
    Il y aura donc une table SQL LI_license et une autre table SQL OWN_owner_license :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TABLE LI_license(
       LI_ident INT UNSIGNED AUTO_INCREMENT,
       LI_activate_date DATE NOT NULL,
       LI_deactivate_date DATE,
       OWN_ident INT UNSIGNED NOT NULL,
       AP_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(LI_ident),
       FOREIGN KEY(OWN_ident) REFERENCES OWN_owner_license(OWN_ident),
       FOREIGN KEY(AP_ident) REFERENCES AP_application(AP_ident)
    );
     
     
    CREATE TABLE OWN_owner_license(
       OWN_ident INT UNSIGNED AUTO_INCREMENT,
       OWN_email VARCHAR(50),
       US_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(OWN_ident),
       FOREIGN KEY(US_ident) REFERENCES US_user(US_ident)
    );

    Je veux maintenant créé le code PHP (POO/MVC) qui va gérer cette bdd. Donc ma question : est-ce que je crée une seule classe LI_license avec les propriétés LI_activate_date, LI_deactivate_date et OWN_email ou bien 2 classes :
    classe LI_license avec les propriétés LI_activate_date, LI_deactivate_date et ref_OWN_owner_license et classe OWN_owner_license avec la propriété OWN_email ?
    (Dans cette discussion je ne tiens pas compte de la classe US_user ni de l'héritage sous-jacent)

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Une seule classe est suffisante et surtout bien plus pratique à l'utilisation. La notion de responsabilité limitée est surtout là pour éviter des classes qui font tout et n'importe quoi.

    Dans cette discussion je ne tiens pas compte de la classe US_user ni de l'héritage sous-jacent
    Attention à ne pas nous coller un héritage entre licence et user qui n'aurait absolument aucun sens.

    Ce qui est éventuellement faisable c'est que ta classe Licence soit composé d'un objet User duquel tu pourras extraire l'email, mais ce n'est pas une obligation (plus complexe , moins performant).
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 499
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse.
    OK pour une seule classe LI_license. Oui, l'héritage, j'y pensais surtout si je créais 2 classes. Ce que j'imagine, c'est une 2e classe US_user et dans la classe LI_license, une propriété ref_US_user pour que la classe LI_license puisse connaître les propriétés de la classe ref_US_user. C'est correct ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Oui c'est ca.

    Tu as n gros 2 solutions :

    Soit tu n'auras besoin que d'un champs bien précis de ton utilisateur associé avec la license , auquel cas pas besoin de s'embeter à avoir un utilisateur complet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Li_License
    {
        private int $id
        private string $date
        private string $email // J'ai mis email , mais ca pourrait être n'importe quel attribut utile représentant owner
    }
    Soit tu peux avoir besoin de plusieurs informations , auquel cas il est surement plus judicieux de lié l'objet user à chaque licence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Li_License
    {
        private int $id
        private string $date
        private US_User $owner
    }
    Et dans ce cas précis il sera possible (mais pas obligatoire) de mettre en place des optimisation pour ne charger les données annexes que quand elle sont nécessaires.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 499
    Billets dans le blog
    1
    Par défaut
    Je suis encore sur cette question. En effet, dans mes classes du modèle (architecture MVC), j'ai une méthode seekId qui retourne un booléen ; true si l'objet est déjà présent en bdd et false sinon. Etant donné cela, si une classe PHP unique correspond à une seule table SQL, et si une seule propriété de la classe PHP permet d'identifier l'objet, la méthode seekId est simple à concevoir : il suffit de tester si cette propriété est déjà en bdd.
    Par contre, si la classe PHP a certaines propriétés dans une table SQL et d'autres dans une autre table, alors je ne vois pas comment concevoir la méthode seekId...

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 499
    Billets dans le blog
    1
    Par défaut
    Pour préciser ma question, voici un cas concret :

    d'abord, j'ai une architecture SQL modélisée par ce MCD :
    Nom : company.png
Affichages : 89
Taille : 10,2 Ko
    avec les 2 tables suivantes :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE CO_company(
       CO_ident INT UNSIGNED AUTO_INCREMENT,
       CO_company VARCHAR(30) NOT NULL,
       PRIMARY KEY(CO_ident),
       UNIQUE(CO_company)
    );
     
    CREATE TABLE BU_businessunit(
       BU_ident INT UNSIGNED AUTO_INCREMENT,
       BU_buname VARCHAR(30) NOT NULL,
       CO_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(BU_ident),
       UNIQUE(BU_buname),
       FOREIGN KEY(CO_ident) REFERENCES CO_company(CO_ident)
    );
    selon la remarque de grunk au post #2, je pense qu'il faut créer une seule classe PHP CO_company avec les 2 propriétés (CO_company et BU_buname). Mais du coup, comment concevoir la méthode seekId ? Si par exemple CO_company est en bdd mais pas BU_buname, doit-elle retourner true ou false ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Limiter des règles à une page précise
    Par grunk dans le forum Apache
    Réponses: 1
    Dernier message: 12/01/2010, 16h09
  2. [SQL-Server] Taille limite des résultats d'une requête
    Par AllezTFC dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/05/2008, 21h03
  3. Coloration des lignes une sur deux
    Par ESVBA dans le forum Word
    Réponses: 2
    Dernier message: 06/07/2007, 14h39
  4. Réponses: 5
    Dernier message: 26/07/2006, 17h01
  5. [JSP][STRUTS] Passer des objets à une classe action
    Par maphi dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2005, 16h55

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