[POO] class Categorie et Categorie Manager
Bonjour je fais toujours un peu de programmation orienté objet....
Et il n'y a quelque chose que je ne comprend pas, c'est pourqu'oi je dois créer une classe Categorie et CategorieManager.
Je vais mettre mes codes rapidement :
<?php
class Categorie {
private $_nom;
private $_id
/**
* Getters
**/
public fnction getNom() {
return $this->_nom;
}
public function getId() {
return $this->_id;
}
/**
* Setters
**/
public function setNom($nom) {
$this->_nom = $nom;
}
public function setId($id) {
this->_id = $id;
}
}
?>
Et ma classe CategorieManager qui a la méthode getCategorie :
public function getCategorie($id,$nb = 0) {
$totalBetween = $id+$nb;
$QSCat = Spdo::getInstance()->query("SELECT categorie_id,categorie_nom,COUNT(artiste_id) AS nb_artiste,artiste_categorie_id FROM punch_categorie
LEFT JOIN punch_artiste ON artiste_categorie_id = categorie_id
WHERE categorie_id
BETWEEN ".intval($id)." AND ".intval($totalBetween)."
GROUP BY categorie_id
ORDER BY categorie_nom ASC
");
if($nb == 0)
return $QSCat->fetch();
else
return $QSCat->fetchAll();
$QSCat->closeCursor();
}
Dans mon controleur(ou ma page plus simplement^^) j'appelle la méthode getCategorie qui me retourne un tableau avec les informations sur la cétégorie.
Mais ma classe Categorie je ne vois pas à quoi elle peut me servir....:S
Merci de ton aide -___|- (Si tu as le temps hein...?^^)
Réponses apportées à cette discussion
C'est à toi de voir. Dans CategorieManager, quand tu récupères le tableau, il faut instancier un object Categorie et lui passer le tableau dans une méthode hydrate qui se charge de setter automatiquement les bonnes valeurs.
<?php
class Category
{
protected
$id = null,
$label = null;
public function hydrateFromArray($category)
{
if (isset($category['id']))
{
$this->setId($category['id']);
}
if (isset($category['label']))
{
$this->setLabel($category['label']);
}
}
public function setId($id)
{
$this->id = (int) $id;
}
public function setLabel($label)
{
$this->label = (string) $label;
}
}
Et pour CategoryManager :
<?php
class CategoryManager
{
public function getCategorie($id)
{
// ta requete sql
// Fetch
$cat = $db->fetch();
if (!empty($cat))
{
$c = new Category();
$c->hydrateFromArray($cat);
return $c; // Retourne un objet Category hydraté correctement
}
return null;
}
}
++
Ok merci, mais je suis obliger de faire comme cela?
Ma technique est signe de mauvaise programmation?
Merci. :)
Hônnetement ce que tu me conseilles de faire , j'ai l'impression que c'est travailler plus pour gagner autant.
Pourqu'oi?
Car on sélectionne les informations de la BDD, qu'on met sous forme de tableau.
On peut exploiter simplement ce tableau.
Mais toi tu préfères faire un super beau hydrateFromArray(très sexy ce nom..^^).. dont je ne vois pas l'utilité.
Merci de ton aide !! :)
Ce n'est pas si sexy que ça, c'est même plutôt très verbeux au contraire. L'idée c'est de ne pas à avoir à traiter un tableau mais un objet complet que tu peux ensuite manipuler comme bon te semble. Un tableau c'est bien à manipuler mais un objet c'est mieux car il peut encapsuler davantage d'informations et pouvoir appeler des méthodes. La POO a pour but de rendre la programmation plus simple même si au début on a plus tendance a écrire davantage de code qu'en procédural.
OK.
Et par exemple si je veux ajouter une catégorie.
Je vais recevoir un tableau $_POST avec $_POST['nom'] $_POST['description']...
C'est bien que je créer l'objet puis je l'insère dans la bdd, ou je peux directement le mettre dans la BDD à partir du tableau??
Dans l'idéal, il faudrait passer directement par l'objet puisque c'est lui qui contient la logique métier pour la manipulation de la BDD (insert, update, select, delete...).