12-05-2015, 09:07 AM
(24-04-2015, 11:09 AM)Xenos a écrit : Je considère plutôt les getters comme des moyens d'interroger l'objet sur une donnée. L'objet répond par une donnée (ou par un autre objet), qui peut tout à fait venir des propriétés internes de la classe, d'une base de données, d'une propriété statique, ou d'une valeur aléatoire.
Oui mais tu couples bien plus tes objets, puisque si tu fais $user->getSomething() tu imposes à l'objet user de te retourner quelque chose. Si tu fais $user->askSomethingByCountry($country) tu laisses la liberté à l'objet user de faire ce qu'il veut.
De ne rien répondre, ou de répondre tout à fait autre chose à country.
Un objet étant censé être une boite noire, tu ne sais pas ce qu'il s'y passe dedans, tu ne peut pas lui demander une valeur puisque son fonctionnement interne t'es inconnu et il peut très bien s'en moquer de ce que tu lui demande.
Concernant ton exemple de code, si askMajority a un soucis et que le fichier n'existe pas, je suppose que tu vas lever une exception non ? Ca veut dire que UserDrinkAllower doit savoir que Country lève une exception, ça veut dire que UserDrinkAllower sait comment marche Country, alors qu'il ne le doit pas le savoir c'est une boite noire. Si tu changes le format de l'exception de Country pour une raison ou une autre, tu vas devoir t'assurer de ne pas casser le code existant qui catch cette exception. Du coup quand tu modifies le fonctionnement interne de Country tu dois t'assurer qu'il continue de marcher avec le monde extérieur et c'est là que l'on voit qu'il y a un couplage fort et que ça rend le code difficile à maintenir et faire évoluer.