La cohesión y el acoplamiento son dos de los temas mas importante en el desarrollo de sistemas orientados a objeto. Estos han sido tratados desde los 60’s cuando iniciaba la POO y como una parte vital de este mundo.
La ley de demeter apareció en el 87 y fue propuesta por Ian Holland mientras trabajaba en un proyecto llamado Demeter, de ahí su nombre.
El objetivo es el bajo acoplamiento teniendo un limite de conocimiento sobre otros componentes o unidades de código. Es decir solo tener contacto con los amigos mas cercanos. Veamos cual es la propuesta.
Un método solo debe hablar:
- Con métodos de la misma clase.
- Con métodos de sus atributos.
- Con métodos de sus parámetros.
- Con métodos de objetos que el instancia.
La idea es no hacer cadenas de llamadas como
1
a.getX().getY().getZ();
y si ocurren es porque algo esta donde no es. Es posible que Z debería estar en X y no en Y.
Aunque puedes encontrar debates sobre esto, en general pienso que es un buen principio de diseño que ayuda a mantener un
código limpio y con bajo acoplamiento. En algún momento recuerdo haber visto una discusión sobre si una Factura
te da
el Cliente
:
1
factura.getCliente();
y la vista desea mostrar el nombre del cliente tendría que hacer algo como:
1
factura.getCliente().getNombre();
Algunos decían que la factura debería entonces dar el nombre del cliente:
1
factura.getNombreCliente();
esto basándose en lo anterior, pero yo personalmente me inclino mas por que un método en la vista reciba el Cliente
y obtenga
el nombre.