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 :

[Tableaux] logique metier


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut [Tableaux] logique metier
    salut
    je me pose une question sur le model MCV et plus precisemen sur la logique
    metier

    mon controller commande des actions, qui elles font appelles des "classe metier"
    ma question est de savoir ou mettre mon acces a ma base
    directemet dans les classes metiers, ou plutot dans les actions(et on transmet des tableaux aux classes metiers)

    quelle est la bonne methode sinon la meilleur
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut


    perso j'utilise le MVC et tous mes accès base sont placés dans les classes métier. c'est bien le principe de ces classes : isoler les objets manipulés du reste de l'appli (la vue). le controleur, lui, ne doit etre qu'un grand switch qui regarde les actions demandées par le client et appelle ces fonctions dans les classes metier. le controleur ne doit pas acceder à la base.

    par contre mes classes metier n'accedent pas directement à la base, je passe par une classe d'abstraction d'accès à mon SGBD...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    un petit exemple
    prenon une classe user,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class user{
    private $login;
    private $pass;
     
    public function setUser()
    {
    $tab=dao::getUser();
    $this->login=$tab['login'];
    $this->pass=$tab['pass']
    }
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $user = new User();
    $tab=dao::getUser();
    $user->setUser($tab);
    :

  4. #4
    Invité
    Invité(e)
    Par défaut
    ben tout depend de ce qu'est ta classe dao...

    et de toutes façons, l'exemple que tu proposes n'est pas un accès en base... là le second exemple est bien sûr meilleur, car tu assures l'independance de ta classe user par rapport à la classe dao.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    la classe dao est ma classe d'acces aux données
    mais je trouve que la deuxieme solution enleve "le sens de la classe user"
    en creant la classe user je me suis dit qu'il y aurai une methode newUser
    mais avec la deuxieme solution la methode disparait car je peut le faire directemet avec la classe dao

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    mes classes métier ont acces a la base en utilisant une classe.
    J'ai des methodes pour se charger depuis la base, se mettre a jour, s insérer et se supprimer dans toutes mes classes métier.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Invité
    Invité(e)
    Par défaut
    oui siddh, mon fonctionnement est le meme

    mais jeff, à quoi correspond exactement cette classe dao ? tu dis qu'elle accède aux données. tu veux dire à la base ? ce n'est pas à ta classe d'abstraction d'accès à la base de données de faire le boulot des classes metier : ta methode getUser() doit etre mise dans ta classe user ;-)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    est ce que ca te limite d'en l'utilisation de tes classes???
    utilise tu des requetes generique(parametrable) ou un jeu de rquete pour chaque class
    est ce qu'il y a un moin d'automatiser les interfaces:
    par exemple j'ai une methode specifique dans la classe (getUser)User qui me permet de remplir l'objet user a partir d'une requete
    comment puige etre sur que cette methode est definie dans la classe dao??

    en fait l'interface peut elle etre declarer inplicitement via un objet ou une methode sans s'en preocuper lors du developpement?

  9. #9
    Invité
    Invité(e)
    Par défaut
    chaque classe metier possede 3 operations qui executent les 4 types de requetes :
    • une fonction statique get() qui recupere l'objet en base grace à son id et qui construit l'objet. elle fait une requete SELECT *
    • une methode ecriture() qui insere ou met à jour l'objet en base (requete INSERT ou UPDATE selon si l'id est defini ou non)
    • une methode suppression() qui fait une requete DELETE en base


    la classe d'abstraction d'acces à la base ne sert qu'à etablir l'independance du systeme vis-a-vis d'un SGBD (ce qui me permet, par exemple, pour la prochaine version de mon site, de passer de MySQL à SQLite)

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    j'ai une classe abstraite dont hérite tous mes objets métiers qui a des methodes :
    • - loadDatabase() : chargement
      - save() : insert/update
      - delete()
      - checkErrors()
      - loadFromRequest() : chargement depuis un form
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    res interressant tous ca
    je suppose que les attribut de classe corresponde au champs de ta table
    mais dans le ca ou tu doi faire une jointure entre table comment gere tu cette requete?

    et boone année à tous le monde

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    he bien vu que ces methodes sont abstraites, il me faut les définir dans chaque objet qui hérite de cette classe

    Effectivement, les attributs correspondent aux champs de ma table, les clés etrangères en général donnent lieu à un attribut correspondant a l'objet métier de la table liée.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    ces methodes sont abstraites, il me faut les définir dans chaque objet qui hérite de cette classe
    a j'avais pas compris ca comme ca
    il faut redefinir les methodes abstraites dans la classe qui heritent

    en fait en regardant la doc, je m'apercoit que j'utilise les classe abstraite pour definir des methode commune et non des methodes abstraites

    quelle est la diffrence entre interface et methode abstraite???

  14. #14
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    une classe est considérée comme abstraite des qu'il y a une méthode abstraite dedans mais d'autres methodes peuvent contenir du code.

    Dans une interface, tu ne peux pas mettre de code du tout.

    Une classe abstraite ne peut s'instancier, elle ne sert qu'a faire de l'héritage.
    Une interface permet de "créer un contrat" que des classes d'arbres d'héritages différents pourront remplir.

    un petit lien au passage :
    http://stephaneey.developpez.com/tut...uveautes/#L2.3
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    ok merci

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    juste une derniere question

    une methode abstaite definie comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    abstract protected function methode();
    peut etre redefinie avec un argument dans la classe heritiere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function methode($arg);

  17. #17
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    normalement non, car ce n'est pas la meme methode a ce moment la !
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

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

Discussions similaires

  1. Ou placer la logique metier?
    Par boukhali dans le forum Design Patterns
    Réponses: 3
    Dernier message: 20/09/2011, 16h52
  2. where, indices tableaux et test logique
    Par iznogoud_23 dans le forum Fortran
    Réponses: 6
    Dernier message: 11/05/2010, 20h32
  3. [Tableaux] logique avec des tableaux
    Par mitmit dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2007, 18h23
  4. Réponses: 6
    Dernier message: 06/03/2007, 16h42
  5. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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