20-05-2015, 07:06 PM
Oui, si tu conserves la vision du 1 getter = récupérer un attribut (et là, je suis d'accord depuis 5 bonnes pages: c'est une approche foireuse).
Rien n'interdis d'avoir une méthode, appelons-la un "asker" plutôt qu'un "getter", qui fait des trucs avant de passer à l'appelant l'objet qu'il veut.
Dans un langage comme PHP, on n'a pas (pour l'instant, mais si j'ai suivis ce que niahoo a dit, ce sera bientôt le cas) de typage de retour. Donc, il n'y a pas de dépendance, puisqu'on peut retourner ce qu'on veut (des papiers, un pot de vin, rien...) ?! En contre partie, en PHP, on devrait tester ce que chaque méthode retourne (puisqu'elles peuvent, et c'est un trait du langage, retourner ce qu'elles veulent).
Je remets ma base au clair, pour être en vrai PHP (et pas en mélasse Java/PHP... >.<)
Maintenant, question: si au lieu de retourner ses Papiers, le Délinquant passe un PotDeVin au Policier, comment tu fais en n'éditant que Delinquant et Policier (ce sont les deux seules classes qui devraient être impactées)?
En PHP West, Delinquant retourne directement un PotDeVin (puisqu'on se sert du fait qu'il n'y a pas de typage de retour dans les méthodes), et Policier fait le tri.
En PHP East, tu fais comment? J'ai cherché, mais je me retrouve à chaque fois obligé ou bien de casser le contrat de Gens dans Delinquant (Deliquant n'implémente plus Gens, ce qui cassera des codes ailleurs), ou bien d'altérer l'interface Gens, ce qui cassera aussi des codes ailleurs
Rien n'interdis d'avoir une méthode, appelons-la un "asker" plutôt qu'un "getter", qui fait des trucs avant de passer à l'appelant l'objet qu'il veut.
Citation :C'est une dépendance de plus et pire, parce que tu as besoin de connaître le format de retour d'une méthode sans que ça soit formalisé nul part.Je sais pas, mais je comprends toujours pas: dans les langages fortement typés (C++, Java), on a un typage de retour qui est formalisé et connu.
Dans un langage comme PHP, on n'a pas (pour l'instant, mais si j'ai suivis ce que niahoo a dit, ce sera bientôt le cas) de typage de retour. Donc, il n'y a pas de dépendance, puisqu'on peut retourner ce qu'on veut (des papiers, un pot de vin, rien...) ?! En contre partie, en PHP, on devrait tester ce que chaque méthode retourne (puisqu'elles peuvent, et c'est un trait du langage, retourner ce qu'elles veulent).
Je remets ma base au clair, pour être en vrai PHP (et pas en mélasse Java/PHP... >.<)
interface Gens {
public function donneTesPapiersA(PapiersReceveur pr);
}
interface PapiersReceveur {
public function voiciMesPapiers(Gens gens, Papiers papiers);
}
class Policier implements PapiersReceveur {
public function papierSvp(Gens $gens) {
$gens->donneTesPapiersA(this);
}
public function voiciMesPapiers(Gens gens, Papiers papiers) {
// ...
}
}
class TypeNormal implements Gens {
public function donneTesPapiersA(PapiersReceveur pr) {
$pr->voiciMesPapiers(this, papiers);
}
}
class Delinquant implements Gens {
public function donneTesPapiersA(PapiersReceveur pr) {
// Ne pas appeler voiciMesPapiers
}
}
Maintenant, question: si au lieu de retourner ses Papiers, le Délinquant passe un PotDeVin au Policier, comment tu fais en n'éditant que Delinquant et Policier (ce sont les deux seules classes qui devraient être impactées)?
En PHP West, Delinquant retourne directement un PotDeVin (puisqu'on se sert du fait qu'il n'y a pas de typage de retour dans les méthodes), et Policier fait le tri.
En PHP East, tu fais comment? J'ai cherché, mais je me retrouve à chaque fois obligé ou bien de casser le contrat de Gens dans Delinquant (Deliquant n'implémente plus Gens, ce qui cassera des codes ailleurs), ou bien d'altérer l'interface Gens, ce qui cassera aussi des codes ailleurs