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 :

[POO] Difficultés pour passer d'un MCD à des classes PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut [POO] Difficultés pour passer d'un MCD à des classes PHP
    Bonjour à tous,
    J'ai posté un message il y a quelques temps, mais n'ayant pas eu de réponse me satisfaisant, je vais la réitérer en essayant d'être un plus clair cette fois.

    Voici un MCD (en pj) illustrant une relation 0.N de chaque côté. Je voudrais transformer ça en PHP orienté Objet. Hors je bute à cet endroit-là.

    1) Existe-il une méthodologie ?
    2) Peut-on utiliser un Design Pattern, si oui lequel ?
    3) Je ne sais pas vraiment quelle ligne directrice suivre. Tous les conseils sont les bienvenues.

    Voici comment je suis parti pour l’instant

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    class Article{
        private $id;
        private $titre;
     
        function __construct($titre=null, $id=null) {
            $this->id = $id;
            $this->titre = $titre;
        }
     
        public function getId() {
            return $this->id;
        }
     
        public function setId($id) {
            $this->id = $id;
        }
     
        public function getTitre() {
            return $this->titre;
        }
     
        public function setTitre($titre) {
            $this->titre = $titre;
        }
    }
    ?>
    Code : 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
    20
    21
    22
    23
    24
    <?php
    require_once 'Mysql.php';
    require 'Article.php';
     
    class ManageArticle{
        public static function add(Article $article){
            $mysql = Mysql::getInstance();
            $mysql->query("insert into article(`titre`) VALUES ('".$article->getTitre()."')");
            $article->setId($mysql->insert_id());
            return true;
        }
     
        public static function getAll(){
            $mysql = Mysql::getInstance();
            $ress = $mysql->query("select * from article");
     
            $listArticle = array();
            while($data = $mysql->fetch($ress)){
                $listArticle[] = new Article($data['titre'], $data['description'], $data['id_article']);
            }
            return $listArticle;
        }
    }
    ?>
    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    class Boutique{
        private $id;
        private $nom;
     
        function __construct($nom=null, $id=null) {
            $this->id = $id;
            $this->nom = $nom;
        }
     
        public function getId() {
            return $this->id;
        }
     
        public function setId($id) {
            $this->id = $id;
        }
     
        public function getNom() {
            return $this->nom;
        }
     
        public function setNom($nom) {
            $this->nom = $nom;
        }
    }
    ?>
    Code : 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
    20
    21
    22
    23
    24
    <?php
    require_once 'Mysql.php';
    require 'Boutique.php';
     
    class ManageBoutique{
        public static function add(Boutique $boutique){
            $mysql = Mysql::getInstance();
            $mysql->query("insert into boutique(`nom`) VALUES ('".$boutique->getNom()."')");
            $boutique->setId($mysql->insert_id());
            return true;
        }
     
        public static function getAll(){
            $mysql = Mysql::getInstance();
            $ress = $mysql->query("select * from boutique");
     
            $listBoutique = array();
            while($data = $mysql->fetch($ress)){
                $listBoutique[] = new Boutique($data['nom'], $data['id_boutique']);
            }
            return $listBoutique;
        }
    }
    ?>
    Hors maintenant comment faire pour insérer et récupérer les objets dans ma table de jointure ?
    Faut-il créer une autre classe ?
    J’ai vu certaines personnes qui mettaient une liste d’article dans boutique et une liste de boutique dans Article, est-ce la meilleure solution ? J’aurais voulu avoir un couplage entre les classes le plus faible possible, pour pouvoir par exemple le liée à d’autres classes. Y a-t-il une façon plus adéquate pour mettre en place ceci ?

    Je pensai faire comme ça :

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    require_once 'Mysql.php';
     
    class ManageArticleBoutique{
        public static function add($article, $boutique){
            $mysql = Mysql::getInstance();
            $mysql->query("insert into j_article_boutique(`id_article`,`id_boutique`) VALUES ('".$article->getId()."', '".$boutique->getId()."')");
    	return true;
        }
     
        public static function getByIdBoutique($idBoutique){
            $mysql = Mysql::getInstance();
            $ress = $mysql->query("select	a.id_article as a_id_article,
    					a.titre as a_titre,
    					b.id_boutique as b_id_boutique,
    					b.nom as b_nom,
    					    from article a, boutique b, j_article_boutique
    					    where   b.id_boutique='".$idBoutique."' and
    						    j_article_boutique.id_article=a.id_article and
    						    j_article_boutique.id_boutique=b.id_boutique");
     
    	$liste = array();
    	$data = $mysql->fetch($ress);
     
    	$boutique = new Boutique($data['b_nom'], $data['b_id_boutique']);
            $liste[]= new Article($data['a_titre'], $data['a_id_article']);
    	while($data = $mysql->fetch($ress))
    	    $liste[] = new Article($data['a_titre'], $data['a_id_article']);
            return array(0 => $boutique, 1 => $liste);
        }
     
        public static function getByIdArticle($idArticle){
            $mysql = Mysql::getInstance();
            $ress = $mysql->query("select	a.id_article as a_id_article,
    					a.titre as a_titre,
    					b.id_boutique as b_id_boutique,
    					b.nom as b_nom,
    					    from article a, boutique b, j_article_boutique
    					    where   a.id_article='".$idArticle."' and
    						    j_article_boutique.id_article=a.id_article and
    						    j_article_boutique.id_boutique=b.id_boutique");
     
    	$liste = array();
    	$data = $mysql->fetch($ress);
    	if($data==NULL)
    	    return array(0 => NULL, 1 => $liste);
     
    	$article = new Article($data['a_titre'], $data['a_id_article']);
            $liste[]= new Boutique($data['b_nom'], $data['b_id_boutique']);
    	while($data = $mysql->fetch($ress))
    	    $liste[] = new Boutique($data['b_nom'], $data['b_id_boutique']);
     
    	return array(0 => $article, 1 => $liste);
        }
    }
    ?>
    Qu’en pensez-vous ?
    En tout cas, merci par avance à tous pour vos conseils et idées.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonsoir.

    as tu lu cet article ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut
    Pour être très honnête je l'ai survolé, mais je n'ai rien vu concernant les relation 0.N

Discussions similaires

  1. Réponses: 27
    Dernier message: 04/07/2011, 15h57
  2. Aide pour passer d'un MCD à un MLR
    Par louya dans le forum Merise
    Réponses: 5
    Dernier message: 11/11/2010, 23h06
  3. Difficultés pour passer à OCaml
    Par james-mi dans le forum Caml
    Réponses: 12
    Dernier message: 19/03/2008, 09h13
  4. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 09h09
  5. Probleme pour passer de l'écriture html a php
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 18/08/2006, 17h24

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