05-06-2015, 09:44 PM
(05-06-2015, 09:28 PM)Xenos a écrit : L'interface composée que tu proposes ne respecte pas la spec. C'est donc bien qu'il existe une spec qui n'est pas codable avec ta méthode.Non pour BCA, BAC etc.
Moi, dans ma spec, j'ai dit "si c'est une A et une B et une C, il doit se passer ça", et non "si c'est une ABC, il doit se passer ça" (note: tu implémentes aussi BCA, BAC, CAB, CBA, ACB?)
La spéc exacte n'est pas possible en PHP mais dans les autres langages si, donc je la change un peu c'est tout.
Ta méthode on n'a pas de contrat passé avec la méthode, donc bug potentiel.
(05-06-2015, 09:28 PM)Xenos a écrit :Non je fais avec le moins pire de ce qui est possible avec le langage. C'est toi qui n'accepte pas que je ne respecte pas à la lettre la spec, moi je décide de la changer un peu car au final je m'en fou qu'elle soit respecté à la lettre ça ne m'apporte rien.Citation :c'est du à une limitation de PHP, c'est pas de ma faute à moiDonc tu attends du langage qu'il se plie à ta façon de coder?
(05-06-2015, 09:28 PM)Xenos a écrit :C'est encore une fois du à une limitation de PHP, dans un autre langage tu auras surchargé l'opérateur >= et tu auras du coup tout de suite vu que tu avais bien une valeur.Citation :En East le postulat "on ne retourne jamais autre chose que this" et pour simplifié à quelqu'un qui débute en East.Ca pour moi, c'est vaseux, et ça sent le "je return parce que ça m'arrange". En plus, Age a une méthode executeIfGreaterOrEqualTo() ce qui lui donne plus que la simple responsabilité de stocker la valeur: il ne fait pas que transporter la valeur.
Toutes les classes qui ont un comportement et qui donc réagisse à l'environnement (qui sont donc des classes qui implémentent forcément une interface) doivent retourner this sur leurs méthodes publiques. Un valueObject n'a aucun comportement ou ne sais pas réagir à son environnement, il ne fait que transporter une donnée.
PHP ne le permet pas, donc on fait avec.
(05-06-2015, 09:28 PM)Xenos a écrit : D'ailleurs, vu que Age n'implémente pas d'interface, elle n'est pas testable. Et vu que tu l'utilises en typehinting, t'es pas en Interface Seggregation.On ne test pas un valueObject, il n'a pas de comportement. C'est comme si tu voulais tester un int ou avoir une interface sur un int.
(05-06-2015, 09:28 PM)Xenos a écrit :J'ai bien nommé NumberComparison pour une bonne raison, il y aurait toutes les méthodes dedans.Citation :Tous les valueObject n'ont pas besoin d'être comparer, mais pour ceux pour qui c'est le cas tu peux parfaitement faire une abstract NumberComparisonTu fais pas d'héritage multiple en PHP, alors comment t'appliques la même approche à executeIfGreaterOrEqualTo, executeIfGreaterThan, executeIfLessOrEqualTo, executeIfLesThan?
(05-06-2015, 09:28 PM)Xenos a écrit :Quand tu es dans une discussion "je te demande de l'or, tu me demande mon âge, je te donne de l'or" tu es obligé d'être dans un dialogue exclusif, sinon tu peux avoir plein de bug qui sortent de nul part. Au niveau perf ça coute pas grand chose.Citation : Tu clones le héro, donc son or est infini. J'avais demandé à Conan de donner son argent, pas l'argent d'un clone[edit] Je reste, puisqu'il y a eu correction entre temps...
→ Teste et tu verras
Okay, c'est fonctionnel. Mais des clones dans tous les sens, sur de la prod, tu penses pas que le serveur va souffrir pour rien? Si on a besoin d'un dialogue exclusif, je dis pas, mais le reste du temps?!
(05-06-2015, 09:28 PM)Xenos a écrit : A force de faire:La question c'est pas de se demander si c'est utile ou pas, la question c'est de coder proprement.
• L'appelant stocke l'état dans lequel il est
• L'appelant appelle l'appelé en se passant comme $caller
• L'appelé fait ses traitements
• L'appelé appelle l'appelant en lui passant son résultat
• L'appelant restaure l'état dans lequel il était et traite le résulta
t
T'as pas juste l'impression de recoder ce que return fait déjà? Dans les 0.1% de cas où c'est utile parce qu'on veut modifier une de ces étapes, je dis pas, c'est bien de faire comme ça parce qu'il n'y a pas de mot clef du langage pour le faire, mais dans les 99.9% du reste du temps, c'est juste lourd pour rien.
Est-ce que tu te dis "là je ne mets pas d'interface ça ne sert à rien" ? Si oui bah c'est pas bon du tout.
(05-06-2015, 09:28 PM)Xenos a écrit : [edit 2]: pour toi instanceof c'est choquant, mais is_integer ca ne l'est pas?C'est un valueObject, sont but c'est de vérifier que la donnée qu'on lui donne correspond à ce qu'il attend, pas le choix du là encore à une limitation de PHP.
En PHP7 on pourra s'affranchir de ce test avec le typehint int.