Ça choque que moi que un getter va soit retourner un objet Gold, soit faire tout un tas d'autres choses et rien retourner ?
Ca pas ce que East veut autoriser?! Doublé par niahoo ^^ (qui formule mieux que moi en plus)
La rigidité de l'API publique et la souplesse du code interne, c'est carrément ce que je t'ai montré tout à l'heure (j'ai pu changer les critères de choix de ma méthode sans rien péter de l'extérieur, si c'est pas une preuve de découplage ça).
Je maintiens: si tu veux que le Hero donne 2x son or si c'est Beggar+Femme, 4x si c'est Kid+Beggar, 1x pour les autres, tu vas faire:
Ca pas ce que East veut autoriser?! Doublé par niahoo ^^ (qui formule mieux que moi en plus)
La rigidité de l'API publique et la souplesse du code interne, c'est carrément ce que je t'ai montré tout à l'heure (j'ai pu changer les critères de choix de ma méthode sans rien péter de l'extérieur, si c'est pas une preuve de découplage ça).
Je maintiens: si tu veux que le Hero donne 2x son or si c'est Beggar+Femme, 4x si c'est Kid+Beggar, 1x pour les autres, tu vas faire:
Code PHP :
<?php
class Kid ... {
public function areYouBeggarByHero(Hero $hero) {
if (???) // Tu fais comment là?
$hero->iAmBeggar($this);
else
$hero->iAmNotBeggar($this);
}
}
class Women ... {
public function areYouBeggarByHero(Hero $hero) {
if (???) // Tu fais comment là?
$hero->iAmBeggar($this);
else
$hero->iAmNotBeggar($this);
}
}
class Beggar ... {
public function areYouWomenByHero(Hero $hero) {
if (???) // Tu fais comment là?
$hero->iAmWomen($this);
else
$hero->iAmNotWomen($this);
}
}
class Hero ... {
public function askGoldByKid(Kid $kid) {
$kid->areYouBeggarByHero($this);
}
public function askGoldByWomen(Women $women) {
$beggar->areYouBeggarByHero($this);
}
public function askGoldByBeggar(Beggar $beggar) {
$beggar->areYouWomenByHero($this);
// Mais là, j'ai pas la condition Kid
// Comment je l'ajoute?
}
// Non-homogeneous method namings
public function iAmWomen(Beggar $beggar) {
$beggar->giveGold(2*$this->gold); // Duplicate
}
public function iAmBeggarByKid(Kid $kid) {
$kid->giveGold(4*$this->gold);
}
public function iAmBeggarByWomen(Women $women) {
$women->giveGold(2*$this->gold); // Duplicate
}
}
? O.OTu m'étonnes que t'avais pas envie de prendre le temps de me montrer...
J'ai l'impression d'avoir dupliqué du code...
Et j'ai pas le cas askGoldByBeggar qui serait demandé par un Beggar+Kid... (ça me semble le plus embêtant, car ça voudrait dire que East interdit certaines features).
Puis j'ai iAmBeggarByWomen qui est exposée en publique, c'est pas génial: une Women pourrait appeler cette méthode directement et racketer le Hero.
Donc soit j'ai fait de travers et je veux bien voir ta solution, soit ça sent l'usine à gaz.