---
title: "Cambiar Asociación Unidireccional a Bidireccional"
type: "refactoring-technique"
slug: "change-unidirectional-association-to-bidirectional"
url: "http://localhost:3000/es/change-unidirectional-association-to-bidirectional.md"
category: "Organizing Data"
description: "Problema: Tienes dos clases que necesitan usar cada una las características de la otra, pero la asociación entre ellas es únicamente unidireccional. Solución: Añade la asociación que falta a la clase que la necesita."
---
# Cambiar Asociación Unidireccional a Bidireccional

> Problema: Tienes dos clases que necesitan usar cada una las características de la otra, pero la asociación entre ellas es únicamente unidireccional. Solución: Añade la asociación que falta a la clase que la necesita.

## Problem

Tienes dos clases que necesitan usar cada una las características de la otra, pero la asociación entre ellas es únicamente unidireccional.

## Solution

Añade la asociación que falta a la clase que la necesita.

## Why Refactor

Originalmente las clases tenían una asociación unidireccional. Pero con el tiempo, el código cliente necesitó acceso a ambos lados de la asociación.

## Benefits

* Si una clase necesita una asociación inversa, puedes simplemente calcularla. Pero si estos cálculos son complejos, es mejor mantener la asociación inversa.

## How to Refactor

1. Añade un campo para mantener la asociación inversa.
2. Decide qué clase será la «dominante». Esta clase contendrá los métodos que crean o actualizan la asociación a medida que se añaden o cambian elementos, estableciendo la asociación en su clase y llamando a los métodos de utilidad para establecer la asociación en el objeto asociado.
3. Crea un método de utilidad para establecer la asociación en la clase «no dominante». El método debería usar lo que se le pasa en los parámetros para completar el campo. Dale al método un nombre evidente para que no se use después con ningún otro propósito.
4. Si los métodos antiguos para controlar la asociación unidireccional estaban en la clase «dominante», complétalos con llamadas a los métodos de utilidad del objeto asociado.
5. Si los métodos antiguos para controlar la asociación estaban en la clase «no dominante», crea los métodos en la clase «dominante», llámalos y delega la ejecución en ellos.
## Relations

**Opposite refactorings**

- [Cambiar Asociación Bidireccional por Unidireccional](/es/change-bidirectional-association-to-unidirectional.md)

