Ley de Démeter (No hables con desconocidos)

Ley de Démeter (No hables con desconocidos)

Hay algunos principios de desarrollo de software que ofrecen un enorme beneficio siguiendo unas pautas muy sencillas. Uno de ellos es la Ley de Démeter.

La Ley de Démeter es un principio de diseño orientado a objetos que nos dice que un objeto debe interactuar únicamente con sus colaboradores directos, sin conocer detalles sobre su estructura o implementación interna o dicho en una frase

Habla con tus amigos, no con los amigos de tus amigos.

Vamos a verlo con un ejemplo.

La Ley de Démeter nos dice que esto es un mal diseño:

Este código obliga a Order a conocer demasiados detalles sobre cómo está implementado Customer. Sabe que existe un objeto ContactInfo, que contiene un email y que ese email debe utilizarse para enviar una notificación.

Si mañana cambia la forma en la que se almacena la información de contacto del cliente o queremos permitir que el cliente especifique otro medio de contacto (por ejemplo por SMS o Whatsapp) tendremos que modificar este código y todos donde se realice una notificación.

Una implementación más adecuada sería:

Ahora Order delega la responsabilidad en Customer, que es quien realmente sabe cómo contactar con el cliente.

De esta forma mantenemos la encapsulación que perdíamos con el primer ejemplo, reducimos el acoplamiento y conseguimos un código más fácil de mantener y evolucionar.

Una forma sencilla de detectar cuándo estamos incumpliendo la Ley de Démeter es buscar cadenas largas de acceso o llamadas encadenadas de la forma:

Las llamadas encadenadas no siempre son un problema; en builders, APIs fluidas y ORM, éstas llamadas forman parte del propio diseño y de la forma de construir la respuesta.

Aunque la Ley de Démeter surgió en la programación orientada a objetos, su idea es universal: cada módulo debería conocer lo mínimo posible sobre la implementación de los demás. Este principio también puede aplicarse en lenguajes cuyo diseño no es eminentemente orientado a objetos como JavaScript o Python, para reducir el acoplamiento y mejorar la mantenibilidad.

Subscribe to A Developer's Notebook

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe