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.