D'acc, avec deux méthodes donc? Et l'appelant doit choisir laquelle utiliser?
Perso, je trouve toujours l'approche problématique, puisque l'appelant doit choisir la méthode uniquement parce que l'appelée (Irma) a un algo de choix interne des Vehicule qui lui est propre.
Pas dit: si l'appelant ne gère que des Vehicule, parce qu'il s'agit d'un intermédiaire?
Code PHP :
<?php class SellerProxy {
public function sellVehicle(Vehicle $vehicle) { $this->irma->sell???($vehicle);
}
}
Ou, par exemple, pour des nombres (cas plus concret):
Code PHP :
<?php class FractionRelle implements Fraction, Nombre{
}
class EntierPositif implements Entier, Nombre {
}
class Additition {
public function add(Nombre $n, Nombre $p) { // ?? }
private function add(Fraction $f, Entier $e) { // Do calc stuff return new Fraction|Entier(); // Depends on the calculation }
private function add(Complexe $c, Nombre $n) { // other calcs } // ... And other private calculation methods }
Le but de ma class d'addition est d'être une façade, pour m'éviter de faire des conversions dans tous les sens (qui en plus se baseraient aussi sur les valeurs des Nombre). L'appelant de Addition n'aurait donc qu'une seule méthode appelable (but d'une Facade), mais cette méthode doit ensuite faire le tri. Et là, sans instanceof, comment cela se passerait?
Le design pattern de Facade serait incompatible avec la notion de choix de méthode par l'appelant.
09-06-2015, 05:03 PM (Modification du message : 09-06-2015, 05:03 PM par niahoo.)
Tu sais, si tu cherches suffisamment longtemps, tu trouveras bien un cas où instanceof est obligatoire. D'autant plus que tu crées le cas toi-même au fur et à mesure. À quoi bon ?
A quoi bon? A savoir si instanceof est vraiment une mauvaise pratique dans l'absolue, ou seulement parce que les autres le disent (comme pour les iframe donc :p ). Perso, je le range dans la catégorie des trucs utilisables quand on en a besoin. Mais je voulais savoir si c'est un avis partagé
Bah le seller sellMoto :p
Il y a sans doute des cas ou c'est inévitable l'instanceof.
Mais pour le moment je vois surtout des cas ou de s'en passer permet de mieux verrouiller les choses.
De mieux verrouiller, ou de faire bouillonner les algos? Parce que la seule raison pour laquelle le seller ait un sellMoto, c'est qu'il le repasse à Irma qui a une différenciation Moto/Camion en interne. Celui qui appelle le SellerProxy subirait ce qui se passe en interne d'Irma...
Mais bon, dans tous les cas, @srm, comment tu ferai pour implémenter un design pattern de Facade sans aucun instanceof (les deux notions me semblant incompatibles) ?
Les iframes, j'en bouffe toute la journée certains mois, et j'ai mon propre avis dessus, sans connaitre celui des autres en général. ça peut être pratique, mais de ce que j'ai vu sur plusieurs applis, ça montre souvent que l'architecte ne sait pas ce qu'il fait, ou du moins n'a pas de connaissances suffisantes pour faire mieux.
C'est souvent le cas aussi dans les grosses successions de if/elseif/elseif/else. Typiquement le genre de bloc dans lequel on utilise les instanceof. Ensuite, je pense que comme toi de temps en temps ça peut servir.