[POO] class Categorie et Categorie Manager

Rechercher

[POO] class Categorie et Categorie Manager

Par saturn1  -  6 reponses  -  Le 01/01/2009 23:27  -  Editer  - 

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

Par Emacs  -  Le 02/01/2009 09:47  -  Haut de page  - 

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;
  }
}

++

 
Par saturn1  -  Le 02/01/2009 17:45  -  Haut de page  - 

Ok merci, mais je suis obliger de faire comme cela?

Ma technique est signe de mauvaise programmation?

Merci. :)

 
Par saturn1  -  Le 02/01/2009 18:29  -  Haut de page  - 

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 !! :)

 
Par Emacs  -  Le 02/01/2009 22:48  -  Haut de page  - 

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.

 
Par saturn1  -  Le 02/01/2009 22:50  -  Haut de page  - 

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??

 
Par Emacs  -  Le 03/01/2009 09:44  -  Haut de page  - 

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...).

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |