05-06-2015, 09:00 PM
(05-06-2015, 08:37 PM)Xenos a écrit : Note d'abord que, pour les deux cas, c'est hyper-verbeux alors que le cas n'est pas si complexe (tu trouves pas?)Oui East et pas mal verbeux.
(05-06-2015, 08:37 PM)Xenos a écrit : • J'ai demandé "si j'implémente Kid et Women", pas "Si j'implémente WomenKid". Dans ta structure, une classe externe qui implémenterait Women et Kid serait rejetée car elle n'implément pas WomenKid. Pourtant, elle implément Women et Kid, comme je l'ai demandé. Les specs ne sont pas respectées.Oui mais une limitation dans PHP ne permet pas de le faire proprement, le plus propre et donc d'avoir un interface composé.
(05-06-2015, 08:37 PM)Xenos a écrit : • Si ma classe implémente Women+Kid, et qu'elle appelle askWomenByGold, pour moi, elle devrait recevoir l'argent d'une Women+Kid. Dans ton code, la classe appelante doit savoir qu'il y a une séparation de cas entre Kid, Women, et KidWomen.Oui et c'est normal c'est elle qui doit choisir comme se présenter, j'ai donné le cas d'un Policier en Civil.
C'est à lui de se présenter comme un Policier ou un Civil.
(05-06-2015, 08:37 PM)Xenos a écrit : • Je trouve dommage de stocker le $gold->getValue() dans Conan. Pourquoi pas le $gold directement?Avoir un valueObject permet de laisser la responsabilité au valueObject de ce qui définie si la valeur et bonne pour le valueObject Gold ou non. De plus ça permet de s'assurer que lorsque l'on me donne de l'or on ne me le donne pas sous n'importe quel format.
(05-06-2015, 08:37 PM)Xenos a écrit : • Si t'es forcé de passer par un WomenKid pour faire du Women+Kid, tu ne sens pas l'explosion combinatoire qui arrive? il faudra implémenter les interfaces AB pour chaque couple utile? ABC pour les triplets? etc? Et si tu crées ABC, il faudra l'implémenter dans tous les codes dont la classe est A,B,C ? Rien ne va te le signaler.Encore une fois, c'est du à une limitation de PHP, c'est pas de ma faute à moi
Et en effet ça pose problème, il va falloir attendre que PHP ajoute ça.
Si je créé ABC ca ne vas pas du tout casser une classe qui implémente A,B,C car quand elle va fait askSomethingByABC() ça ne marchera pas car elle ne respectera pas l'interface, comme d'habitude donc.
(05-06-2015, 08:37 PM)Xenos a écrit : • Heu, c'est pas du East: j'ai return $this->value; dans AgeEn East le postulat "on ne retourne jamais autre chose que this" et pour simplifié à quelqu'un qui débute en East.
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.
(05-06-2015, 08:37 PM)Xenos a écrit : • T'as pas l'impression que executeIfGreaterOrEqualTo sera copié-collé dans d'autres classes (comme Gold) ?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 NumberComparison
(05-06-2015, 08:37 PM)Xenos a écrit : • ageOfWomenIs peut être appelé dans l'ordre qu'on veut:
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);
}
}
(05-06-2015, 08:37 PM)Xenos a écrit : • Tu clones le héro, donc son or est infini. J'avais demandé à Conan de donner son argent, pas l'argent d'un cloneAh bon ? Test
(05-06-2015, 08:37 PM)Xenos a écrit : • Si, dans une autre méthode de Hero, il faut interroger l'age d'une Women, il faudra ajouter une méthode ageOfWomenIs, mais celle-ci existe déjà pour askGoldByWomen ?!Non il faudra juste définir un contexte pour savoir dans quel cas on a demandé l'âge.
Pour une demande de Gold ? Pour autre chose ?