04-06-2015, 12:39 PM
(04-06-2015, 11:59 AM)Xenos a écrit : Si le setter est un ordre donné à la classe, on n'est pas dans le je te fais confiance. Sinon, le setBroken doit aussi être testé dans le contexte présente (aka, le test précédent teste à la fois setBroken et userWantsToWatchYou).C'est pas exactement un ordre en fait. C'est une initialisation. Et je lui fais confiance pour s'initialiser correctement.
Si c'était un comportement je lui aurais dis "je veux te casser" et la télé aurait pu me dire "je suis incassable" et ne rien faire, ou se casser.
(04-06-2015, 11:59 AM)Xenos a écrit : Pourquoi le fait que la classe appelée fasse le tri Barman/Policier ne serait pas Open/Close?
Okay, le BarmanPolicier en East peut se présenter comme l'un ou comme l'autre. Et s'il veut se présenter comme les deux? Perso, je dirai que cela rajouterait une interface (BarmanAndPoliceman), mais là encore on effondre la combinatoire.
Parce que tu dois modifier du code existant pour rajouter des instanceof
Si quelqu'un est à la fois un Barman et un Policier et que l'on a besoin de ça... Je t'avoue que je vois pas trop de cas concret et que je ne sais pas trop comment on résoudrait ça proprement.
Mais peut-être avec une autre interface qui est la composition des deux.
(04-06-2015, 11:59 AM)Xenos a écrit : Si getReligion est déjà dans Consumer (ça aurait plus sa place dans Human d'ailleurs), il n'y a rien à changer à l'interface en West. C'est un cas probable, puisque le getReligion est commun à plusieurs (toutes) interfaces appelantes. En revanche, en East, il faudra forcément la changer puisqu'il n'y a aucune chance que Barman ait déjà son askReligionByBarman. C'est le soucis de réutilisation introduis par les askWhatByWho.
Le soucis et l'avantage de la souplesse et des modifications open/close, puisqu'au moins je peux lui répondre ce que je veux au Barman alors qu'avec un getter je ne peux pas.
(04-06-2015, 11:59 AM)Xenos a écrit : Si Beaucoup plus de classes tierces impactées et encore heureux., alors ton code est tentaculeux, et le moindre changement va impliquer des modifications partout, ce qui va rendre la maintenance affreuse. L'interface n'a pas vocation à changer (Open/Close principle), et East oblige à modifier 2 interfaces pour inclure la religion, alors que West n'en modifie au pire qu'une (getReligion, et encore on peut s'en passer en créant de nouvelles interfaces, une nouvelle classe et le pattern Decorator/la composition) voire, 0 (c'est le code interne qui change).
Partout faut le dire vite, il y a pas 50 classes qui dépendent d'une interface.
Et quoi qu'il en soit, ça a toujours été le principe des interfaces.
Montre voir ce que ça donnerait avec ton decorator et composition, ça sera plus facile ensuite pour pointer les soucis que ça provoque cette solution.