---
title: "Mudar Associação Bidirecional para Unidirecional"
type: "refactoring-technique"
slug: "change-bidirectional-association-to-unidirectional"
url: "http://localhost:3000/pt-br/change-bidirectional-association-to-unidirectional.md"
category: "Organizing Data"
description: "Problema: Você tem uma associação bidirecional entre classes, mas uma das classes não usa os recursos da outra. Solução: Remova a associação não utilizada."
---
# Mudar Associação Bidirecional para Unidirecional

> Problema: Você tem uma associação bidirecional entre classes, mas uma das classes não usa os recursos da outra. Solução: Remova a associação não utilizada.

## Problem

Você tem uma associação bidirecional entre classes, mas uma das classes não usa os recursos da outra.

## Solution

Remova a associação não utilizada.

## Why Refactor

Uma associação bidirecional é geralmente mais difícil de manter do que uma unidirecional, exigindo código adicional para criar e excluir corretamente os objetos relevantes. Isso torna o programa mais complicado.

Além disso, uma associação bidirecional implementada de forma inadequada pode causar problemas para o coletor de lixo (levando, por sua vez, ao inchaço de memória por objetos não utilizados).

Exemplo: o coletor de lixo remove da memória os objetos que não são mais referenciados por outros objetos. Digamos que um par de objetos `User`\-`Order` foi criado, usado e depois abandonado. Mas esses objetos não serão removidos da memória, pois ainda se referem um ao outro. Dito isso, esse problema está se tornando menos importante graças aos avanços nas linguagens de programação, que agora identificam automaticamente referências de objetos não utilizadas e as removem da memória.

Há também o problema da interdependência entre classes. Em uma associação bidirecional, as duas classes precisam conhecer uma à outra, o que significa que não podem ser usadas separadamente. Se muitas dessas associações estiverem presentes, diferentes partes do programa se tornam dependentes demais umas das outras e quaisquer alterações em um componente podem afetar os outros componentes.

## Benefits

* Simplifica a classe que não precisa do relacionamento. Menos código significa menos manutenção de código.
* Reduz a dependência entre classes. Classes independentes são mais fáceis de manter, já que qualquer alteração em uma classe afeta apenas essa classe.

## How to Refactor

1. Certifique-se de que uma das seguintes condições seja verdadeira para suas classes:

  * Nenhuma associação é usada.
  * Há outra maneira de obter o objeto associado, como por meio de uma consulta ao banco de dados.
  * O objeto associado pode ser passado como argumento para os métodos que o usam.
2. Dependendo da sua situação, o uso de um campo que contém uma associação com outro objeto deve ser substituído por um parâmetro ou chamada de método para obter o objeto de uma maneira diferente.
3. Exclua o código que atribui o objeto associado ao campo.
4. Exclua o campo agora não utilizado.
## Relations

**Opposite refactorings**

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

**Eliminates smells**

- [Intimidade Inapropriada](/pt-br/smells/inappropriate-intimacy.md)

