Le 8 février 2011 09:15, Guillaume Betous > En farfouillant un peu, je retrouve un conseil que j'avais déjà vu passer > mais que je n'avais pas compris : "The Law of Demeter" [2][3], traduisible > en français par la "loi de moindre connaissance" (???), où une règle > voudrait qu'un modèle doit se limiter à communiquer avec un modèle > immédiatement associé, et non pas faire des "bonds" de modèle à modèle. >
En fait on dit tout simplement la loi de Demeter (http://fr.wikipedia.org/wiki/Loi_de_Demeter) > En gros, on interdit "post.author.name", et on préfère écrire un wrapper > (Rails nous facilite encore cette tâche avec les delegate) et donc taper > post.author_name. > On dit qu'il faut eviter la "navigation transitive". En fait, un modèle ne doit pas connaitre l'architecture de l'application. C'est un principe de base que l'on retrouve par exemple dans le bouquin Clean Code (http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?tag=duckduckgo-d-20) Le problème est justement dans ce que tu dis: " Mais je ne vois pas en quoi ça change quoi que ce soit, tant que name est une méthode ou un attribut du modèle author," Justement, l'objectif est de pouvoir changer l'implémentation d'un modèle sans avoir à impacter les autres. Au pire, tu apporteras une modification sur ces voisins, qui du coup sont normalement dans la même zone du Domaine métier que tu manipules. Après, c'est sur que sur une application de la taille d'un blog, on en ressent moins le besoin. Par contre dès que tu commences à faire un truc un peu plus costaud, tu le sens bien. J'ajouterais que dans le contexte d'une application plus grosse que nous avons récupéré avec mes équipiers, on a identifier la navigation transitive comme étant une gène énorme pour la mise en place de test unitaire (encore des gens qui ne développe pas en TDD). J'espère que ça aide ta reflexion :-) -- Yannick Francois +33 683 785 716 <http://kantena.com> -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected]
