Cambiar Asociación Bidireccional por Unidireccional.
Tienes una asociación bidireccional entre clases, pero una de las clases no usa las características de la otra.
Elimina la asociación no utilizada.
##Example
##Why Refactor
Una asociación bidireccional es, en general, más difícil de mantener que una unidireccional, ya que requiere código adicional para crear y eliminar correctamente los objetos relevantes. Esto hace que el programa sea más complicado.
Además, una asociación bidireccional mal implementada puede causar problemas con la recolección de basura (lo que a su vez provoca un aumento del uso de memoria por objetos no utilizados).
Ejemplo: el recolector de basura elimina de la memoria los objetos que ya no están referenciados por otros objetos. Supongamos que se creó, se usó y luego se abandonó un par de objetos User-Order. Pero estos objetos no se eliminarán de la memoria, ya que todavía se refieren entre sí. Dicho esto, este problema es cada vez menos importante gracias a los avances en los lenguajes de programación, que ahora identifican automáticamente las referencias a objetos no utilizados y las eliminan de la memoria.
También está el problema de la interdependencia entre clases. En una asociación bidireccional, ambas clases deben conocerse mutuamente, lo que significa que no pueden usarse por separado. Si hay muchas de estas asociaciones, distintas partes del programa se vuelven demasiado dependientes entre sí y cualquier cambio en un componente puede afectar a los demás componentes.
##Benefits
-
Simplifica la clase que no necesita la relación. Menos código equivale a menos mantenimiento de código.
-
Reduce la dependencia entre clases. Las clases independientes son más fáciles de mantener, ya que cualquier cambio en una clase afecta únicamente a esa clase.
##How to Refactor
-
Asegúrate de que se cumpla una de las siguientes condiciones para tus clases:
-
No se usa ninguna asociación.
-
Existe otra manera de obtener el objeto asociado, como a través de una consulta a la base de datos.
-
El objeto asociado puede pasarse como argumento a los métodos que lo usan.
-
-
Según tu situación, el uso de un campo que contiene una asociación con otro objeto debería reemplazarse por un parámetro o una llamada a un método para obtener el objeto de otra manera.
-
Elimina el código que asigna el objeto asociado al campo.
-
Elimina el campo que ahora ya no se usa.