---
title: "Mudar Associação Unidirecional para Bidirecional"
type: "refactoring-technique"
slug: "change-unidirectional-association-to-bidirectional"
url: "http://localhost:3000/pt-br/change-unidirectional-association-to-bidirectional.md"
category: "Organizing Data"
description: "Problema: Você tem duas classes que precisam, cada uma, usar os recursos da outra, mas a associação entre elas é apenas unidirecional. Solução: Adicione a associação que falta à classe que precisa dela."
---
# Mudar Associação Unidirecional para Bidirecional

> Problema: Você tem duas classes que precisam, cada uma, usar os recursos da outra, mas a associação entre elas é apenas unidirecional. Solução: Adicione a associação que falta à classe que precisa dela.

## Problem

Você tem duas classes que precisam, cada uma, usar os recursos da outra, mas a associação entre elas é apenas unidirecional.

## Solution

Adicione a associação que falta à classe que precisa dela.

## Why Refactor

Originalmente, as classes tinham uma associação unidirecional. Mas, com o tempo, o código cliente precisou de acesso aos dois lados da associação.

## Benefits

* Se uma classe precisa de uma associação reversa, você pode simplesmente calculá-la. Mas se esses cálculos forem complexos, é melhor manter a associação reversa.

## How to Refactor

1. Adicione um campo para armazenar a associação reversa.
2. Decida qual classe será “dominante”. Essa classe conterá os métodos que criam ou atualizam a associação à medida que elementos são adicionados ou alterados, estabelecendo a associação em sua própria classe e chamando os métodos utilitários para estabelecer a associação no objeto associado.
3. Crie um método utilitário para estabelecer a associação na classe “não dominante”. O método deve usar o que recebe nos parâmetros para preencher o campo. Dê ao método um nome óbvio para que ele não seja usado depois para qualquer outra finalidade.
4. Se os métodos antigos para controlar a associação unidirecional estavam na classe “dominante”, complemente-os com chamadas aos métodos utilitários do objeto associado.
5. Se os métodos antigos para controlar a associação estavam na classe “não dominante”, crie os métodos na classe “dominante”, chame-os e delegue a execução a eles.
## Relations

**Opposite refactorings**

- [Mudar Associação Bidirecional para Unidirecional](/pt-br/change-bidirectional-association-to-unidirectional.md)

