2015-08-19 2 views
1

J'ai lu un article sur Law of Demeter et ça me rend confus.Loi de Demeter - est-ce vraiment communiquer uniquement avec des amis?

Il affirme que quelque chose comme ceci:

var width = mapControl.get_mapState().getMapRange().getSize().get_width(); 

devrait être remplacé par ceci:

var mapState = mapControl.get_mapState(); 
var mapRange = mapState.get_mapRange(); 
var width = mapRange.get_width() 

Je suis un peu confondu la cause ici ce dernier on est tout de même que le premier mais écrit différemment. Dans les deux cas, j'accède finalement à "largeur" ​​qui n'est pas un ami direct de ma classe actuelle.

Alors, pourquoi la deuxième façon est-elle vraiment meilleure?

+1

Non, cet article n'a aucun sens. Pourriez-vous le relier? – Bergi

+0

il a été imprimé des choses, sinon il y aurait quelques commentaires critiques immédiatement ci-dessous. C'est pourquoi ça m'a rendu confus. – RobertPorter

Répondre

1

Je suis un peu confus ici parce que le dernier est juste le même que le premier mais écrit différemment. Dans les deux cas, j'accède finalement à "largeur" ​​qui n'est pas un ami direct de ma classe actuelle.

Alors, pourquoi la deuxième façon est-elle vraiment meilleure?

Ce n'est pas vraiment mieux. Une loi d'approche Demeter serait de remanier le code, de sorte que le code client ressemble à ceci:

var width = mapControl.get_width(); 

Dans ce cas, le code client n'a pas besoin de savoir que MapControl a un « état », qui a "range", qui a une "largeur". Il a juste besoin de savoir qu'il expose une "largeur".

+0

C'est ainsi que je l'ai compris, je suppose que la source ne devait pas être fiable et contenait une mauvaise interprétation. – RobertPorter