Singleton overkill?

ViPHP
ViPHP | 4674 Messages

17 juil. 2009, 17:39

J'aime bien le principe des injections de dépendances mais … ça n'a rien de nouveau, et je trouve que Symfony met ça trop en avant. Sans être dans la critique, je trouve que Symfony en parle comme si c'était une révolution, alors que non. C'est juste qu'on passe des objets au lieu de passer des chaînes de caractères (si je vulgarise). Donc on fait du Sf ou ZF à la place de PEAR. Wala …
Ah, je l'avais pas pris comme ça :?
Tu le comprenais comment ?
Soit on donne un objet (qui peut être typé par une interface, donc on est en pleine programmation orientée objet), soit on donne un tableau avec plein de paramètres et c'est la méthode qui instancie tout. Avec cette dernière solution, l'utilisateur a moins de code à écrire, mais ce n'est pas assez souple et trop lent. Avec la première solution, l'utilisateur doit écrire plus de code, mais il fait ce qu'il veut.
Là où c'est malin, c'est que Sf a réussi à partiellement abstraire cette écrire de code « supplémentaire » avec le composant SfContainer. Ce n'est pas aussi rapide à l'exécution, mais ça l'est en écriture. Et ce n'est possible que parce que Sf est un framework, et non pas un ensemble de bibliothèques (comme l'est ZF).

Un exemple : on veut utiliser un gestionnaire de log. Il peut écrire les logs dans un fichier ou sur le terminal.

Avec PEAR (sans l'injection de dépendance), on écrirait :
$log = new Log('file', 'toto.log');
• Avantage : plus rapide à écrire.
• Inconvénient : et si on veut ajouter une nouvelle sortie ? Bah on touche au code, pas bien.

Avec ZF ou Hoa (avec l'injection de dépendance), on écrirait :
$log = new Log(new File('toto.log'));
• Avantage : ultra modulable, on fait ce qu'on veut tant que notre objet est un flux qui permet l'écriture.
• Inconvénient : plus long à écrire pour le développeur, mais c'est totalement négligeable.

Avec Sf, on écrirait :
$log = new Log();
, mais on aurait dans le fichier de configuration du composant Log :

Code : Tout sélectionner

log: use: class: File with: Toto.log
ou quelque chose de ce genre. C'est une sorte de juste milieu.
• Avantage : modulable et abstrait, donc on peut modifier le comportement du code sans y toucher (on touche seulement le fichier de configuration).
• Inconvénient : c'est une moitié de solution car c'est mi-rigide mi-souple. Il faut que le composant SfContainer soit suffisamment puissant pour faire ce qu'on veut avec, ce qui n'est pas forcément évident ou immédiat.

Je dis tout ça, mais je ne connais pas plus que ça Sf (je connais bien les sources, mais très peu à l'utilisation). C'est juste un exemple pour expliquer la philosophie de ce que j'en ai compris.

Mon opinion dans tout ça, je préfère la solution puriste, comme ZF ou Hoa le fait (logique que j'aime comme Hoa fait ^^).
L'équipe Symfony insiste fortement sur le fait qu'une bonne application Symfony c'est plus que l'utilisation du framework, mais également l'utilisation des bonnes pratiques. Et comme ils considère cet aspect comme une des bonnes pratiques de base et insiste sur le fait qu'il faut l'utiliser.
Voilà ma version de ce qui est dit. ;)
D'accord, je comprends dans ce cas.
Mais si on revient au sujet initial : c'est quoi le rapport avec les singletons ? C'est juste que leur abstraction ne peut pas marcher avec des singletons ? Bah si … je ne vois pas où les problèmes :-k ?
Relis bien mon message ! le problème n'est pas l'utilisation intrinsèque des singletons, mais la manière d'utiliser un singleton. ;)
Ok, je voulais m'assurer d'avoir bien compris les choses :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 juil. 2009, 18:41

C'est marrant, on a l'impression que tu ne lis pas le message avant de répondre.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4674 Messages

17 juil. 2009, 18:50

Bah en quoi ai-je mal répondu ? D'ailleurs, je ne répondais à rien de particulier, j'expliquais mieux mes propos.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 juil. 2009, 18:58

Pardon, j'ai oublié le ;)

Sinon, ce qui me fait penser ça, c'est :
Tu le comprenais comment ?
[...]
D'accord, je comprends dans ce cas.
Surtout que j'avais eu l'impression au message précédent que tu avais zappé une partie de ma réponse :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4674 Messages

17 juil. 2009, 19:08

Meuh non mon p'tit Zeus :-).

Et quand je disais : « D'accord, je comprends dans ce cas. », c'est à propos de pourquoi Symfony en parle toujours.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

17 juil. 2009, 19:42

Pour un poste résolu en quelques message vous avez fini par me faire tourner la tête ;)

Allé, j'en entamme un deuxième :lol:

Eléphanteau du PHP | 30 Messages

18 juil. 2009, 01:29

Malgré quelques recherches sur le Web, le livre Tête la première, Design Patterns n'est apparemment plus disponible. :(
Si par hasard, vous connaissez d'autres livres sur les Design Patterns en français, j'aimerai en connaitre le titre. :)

Merci d'avance!