Methode direct ou via getters/setters
Posté : 05 juin 2009, 11:37
Salut à tous,
Ce n'est pas réellement un problème de programmation qui m'amène ici, mais plutôt un problème de conceptualisation.
Pour faire très bref, le système du site que je développe est constitué de fiches qui appartiennent à des catégories, avec une gestion des utilisateurs (toussa, toussa, ...).
Les puristes de la POO disent que par défaut, toutes les propriétés devraient être privées, sauf si on a une bonne raison de les rendre publiques ou protégées. Pour y accéder au sein de mes méthodes, deux façons de faire :
1. La méthode un peu laxiste, mais très pratique : je passe mes données directement en paramêtre de mes méthodes, et je stocke les valeurs dans les propriétés adéquates
2. La méthode radicale : je crée un super objet (qui peut être abstrait) qui ne sert qu'à faire des Get() et des Set(), et tous mes objets en héritent.
Exemple 1 :
Exemple 2 :
Selon vous, quelle serait la meilleure méthode à adopter au niveau de la conceptualisation ?
Ce n'est pas réellement un problème de programmation qui m'amène ici, mais plutôt un problème de conceptualisation.
Pour faire très bref, le système du site que je développe est constitué de fiches qui appartiennent à des catégories, avec une gestion des utilisateurs (toussa, toussa, ...).
Les puristes de la POO disent que par défaut, toutes les propriétés devraient être privées, sauf si on a une bonne raison de les rendre publiques ou protégées. Pour y accéder au sein de mes méthodes, deux façons de faire :
1. La méthode un peu laxiste, mais très pratique : je passe mes données directement en paramêtre de mes méthodes, et je stocke les valeurs dans les propriétés adéquates
2. La méthode radicale : je crée un super objet (qui peut être abstrait) qui ne sert qu'à faire des Get() et des Set(), et tous mes objets en héritent.
Exemple 1 :
public function Create($name, $parent_id = 0)
{
try
{
// Tester les variables en entrée
if ( !is_numeric($parent_id) || !is_string($name) ) throw new Exception();
$mysql = MySQL::getInstance();
$id = $mysql->Query('INSERT INTO categories (cat_id, cat_parentid, cat_name) VALUES ("",'.$mysql->EscapeString($parent_id).',"'.$mysql->EscapeString($name).'")', TRUE);
$this->id = $id;
$this->parent_id = $parent_id;
$this->name = $name;
}
catch (Exception $e)
{
throw $e;
}
}
Les valeurs que prendront les propriétés de ma catégorie sont définies directement dans la classe. Les propriétés sont privées, donc ça ne pose pas de problème.Exemple 2 :
class Item
{
function Get($property_name)
{
if ( ($return_value = property_exists($this, $property_name)) === TRUE) $return_value = $this->{$property_name};
return $return_value;
}
function Set($property_name, $value)
{
if ( ($return_value = property_exists($this, $property_name)) === TRUE) $this->{$property_name} = $value;
return $return_value;
}
En reprenant l'exemple 1 et celui-ci, je devrais appeler mes Set() en dehors de la classe et la méthode de l'exemple 1 ne contiendrait plus que ce qui a trait à la vérification des données et au traitement MySQL.Selon vous, quelle serait la meilleure méthode à adopter au niveau de la conceptualisation ?