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.
http://uploads.siteduzero.com/files/245001_246000/245384.png
Voici un MCD 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
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 :
Qu’en pensez-vous ?
En tout cas, merci par avance à tous pour vos conseils et idées.
Modifié par TaKiNeLiNfO (12 Jul 2010 - 19:01)
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.
http://uploads.siteduzero.com/files/245001_246000/245384.png
Voici un MCD 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
<?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;
}
}
?>
<?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;
}
}
?>
<?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;
}
}
?>
<?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 :
<?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.
Modifié par TaKiNeLiNfO (12 Jul 2010 - 19:01)