DESIGN PATTERNS - CREATEURS

Signaler
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52693-design-patterns-createurs

Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
Question de point vue, la tienne fait : return $retourClasse->newInstanceArgs($arguments); ce que je voulai absolument eviter parce que ca t'oblige a implementer tes classe sous un format unique alors qu'avec la mienne c'est generique
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012

salut

Je n'ai visionné que la factory et franchement je ne suis pas du tout convaincu et ne changerais pas celle que j'utilise. ex :

final class Fabrique {
private static $_instance = null;
private $_namespace;

protected function __construct() {}

/**
* retourne une instance de la classe en tenant compte du namespace
* si présent.
*
* @param $namespace
* @return object
*/
public static function getInstance($namespace = null) {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
self::$_instance->_namespace = $namespace;
return self::$_instance;
}

public function __call($methodes,$arguments) {
$classe = ucfirst(strtolower($this->_namespace.$methodes));
if (class_exists($classe,false)) {
$retourClasse = new ReflectionClass($classe);
if ($retourClasse->isInstantiable() && $retourClasse->hasMethod('__construct')) {
return $retourClasse->newInstanceArgs($arguments);
} else {
throw new Format_Generique('La classe '.$classe.' n\'est pas instanciable');
}
} else {
throw new Format_Generique('La classe '.$classe.' est introuvable');
}
}
}

si çà peut t'inspirer davantage;)
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
Merci pour vos commentaires ;)

Pour la facory method j'avoue que c'est plutot lourd mais en fait j'ai eu quelque problemes avec call_user_function et j'ai trouve ca plus generique car par exemple on peu vouloir une classe avec un constructeur vide et un initialisateur et je sais plus exactement pourquoi mais ca m'a pose probleme a l'epoque j'aurais du noter exactement le soucis que j'avais eu, a la base je voulai eviter l'eval.
Pour l'exception et l'utilisation de $class et $function c'est que je trouve ca moins lourd a lire que getTrace() on sait direction de quelle classe et a quel appel l'exception a ete levee mais la c'est juste un choix esthetique en fait getTrace est plus verbose c'est sur ^^
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
Un peu complexe.

L'algo d'instanciation de la Factory est trop lourd : utilisation de eval(), func_get_args(). Dans ce cas, l'utilisation de la réflexion est tout à fait adaptée.

Pourquoi utiliser $class et $function dans l'exception alors que l'erreur est identifiable par l'exception qui l'a créé ? Si tu veux pousser la localisation de l'erreur tu peux t'aider d'Exception::getTrace().

Il n'y a pas d'erreurs mais des problèmes de conception et "d'optimisation".
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Désolé, je n'ai jeté un oeil que rapidement, mais... bon ben je pense qu'on peut te faire confiance sur la qualité de la source.
En plus, de ce que j'ai vu, ça m'a l'air très propre. Et je doute qu'il y ait des erreurs grossières :)
Ca fait du bien de voir des sources pure POO, ça change ^^