Citation :Oui mais une limitation dans PHP ne permet pas de le faire proprement, le plus propre et donc d'avoir un interface composé.Pourquoi ce serait "sale" ça?
Code PHP :
<?php
class Hero {
public function getGold($asker) {
$amount = $asker instanceof Women && $asker instanceof Kid ? $this->gold : $asker instanceof Women ? 2 : $asker instanceof Kid ? 1 : 0;
$this->gold -= $amount;
return $amount;
}
}
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.
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?)
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?
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.
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.
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?
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?!
Et pour la petite peste:
Code PHP :
<?php
class PetitePeste implements Women {
public function ageIsAskedByHero(Hero $hero) {
}
public function racketer(Hero $hero) {
// Ca pourrait venir d'un autre bout de code:
// Dans un tel cas, bon courage pour débugger :)
$hero->ageOfWomenIs(new Age(42));
$hero->askGoldByWomen($this);
}
public function giveGoldByHero(Gold $gold, Hero $hero) {
echo('Thanks for your ' . $gold->getValue() . ' goldcoins, sucker!');
}
}
$peste = new PetitePeste();
$peste->racketer($conan);
var_dump($conan);