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]

Répondre à