Please enable JavaScript.
Coggle requires JavaScript to display documents.
Ley de Demeter: No aceptes caramelos de desconocidos b89ab8acd512c8b2277bd…
Ley de Demeter: No aceptes caramelos de desconocidos
La problemática
¿Cómo soluciono las violaciones de la Ley de Demeter?
No hay una solución única para este tema
Depende del tipo de clase que tengamos
Objetos
Estructuras de datos
Soluciones
Arquitectura
Una buena arquitectura
Normalmente en una arquitectura cada capa tendrá una serie de interfaces con las que comunicarse
Comprender mejor tu dominio
El no entender bien nuestro dominio puede desembocar fácilmente en que no modelicemos bien la aplicación
Hincapié en los distintos tipos de elementos que nos pueden ayudar a modelar nuestro software
Dominio y en particular de Domain Driven Design
Añadir métodos extra
getX().doSomething()
getY().doSomething()
¿Qué es la Ley de Demeter?
Ley de Demeter se cumple
Teniendo una función f de una clase C, esa función sólo llama a funciones de:
• Un objecto creado por f
• Un objeto pasado como argumento a f
• C
• Un objeto almacenado en campo de C
Una forma para detectar si la ley se está violando
No es una razón 100% fiable
El código anterior se podría escribir de la siguiente forma, y seguiría siendo igual de inválido:
val y = getY()
val z = getZ()
val x = getX()
z.doSomething()
Si estás accediendo a la estructura interna de otra clase para llamara a sus métodos, seguramente estés violando la ley
Nuestro objeto no debería conocer las entrañas de otros objetos con los que interactúa
¿Cuál es el problema aquí?
Estamos acoplando el código a la estructura de las clases
Es muy propenso a que cuando se modifique falle.
El problema surge cuando una de las clases necesita utilizar alguno de los objetos uno cuantos niveles por debajo.
Ejemplo:getX().getY().getZ().doSomething()
Estamos creando nuestro código a partir de clases pequeñas que interactúan entre ellas.
Conclusión
No tomársela como algo que no nos podemos saltar
Recordar la sobre-ingeniería es tan mala como la completa carencia de ella