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:

  1. Con métodos de la misma clase.
  2. Con métodos de sus atributos.
  3. Con métodos de sus parámetros.
  4. Con métodos de objetos que el instancia.

Ley de Demeter

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.


Franky Villadiego

Volando hacia el desarrollo productivo!