---
title: "Transformer une association unidirectionnelle en bidirectionnelle"
type: "refactoring-technique"
slug: "change-unidirectional-association-to-bidirectional"
url: "http://localhost:3000/fr/change-unidirectional-association-to-bidirectional.md"
category: "Organizing Data"
description: "Problème : Vous avez deux classes qui ont chacune besoin d'utiliser les fonctionnalités de l'autre, mais l'association entre elles n'est qu'unidirectionnelle. Solution : Ajoutez l'association manquante à la classe qui en a besoin."
---
# Transformer une association unidirectionnelle en bidirectionnelle

> Problème : Vous avez deux classes qui ont chacune besoin d'utiliser les fonctionnalités de l'autre, mais l'association entre elles n'est qu'unidirectionnelle. Solution : Ajoutez l'association manquante à la classe qui en a besoin.

## Problem

Vous avez deux classes qui ont chacune besoin d'utiliser les fonctionnalités de l'autre, mais l'association entre elles n'est qu'unidirectionnelle.

## Solution

Ajoutez l'association manquante à la classe qui en a besoin.

## Why Refactor

À l'origine, les classes avaient une association unidirectionnelle. Mais avec le temps, le code client a eu besoin d'accéder aux deux côtés de l'association.

## Benefits

* Si une classe a besoin d'une association inverse, vous pouvez simplement la calculer. Mais si ces calculs sont complexes, il est préférable de conserver l'association inverse.

## How to Refactor

1. Ajoutez un champ pour contenir l'association inverse.
2. Décidez quelle classe sera « dominante ». Cette classe contiendra les méthodes qui créent ou mettent à jour l'association à mesure que des éléments sont ajoutés ou modifiés, en établissant l'association dans sa propre classe et en appelant les méthodes utilitaires pour établir l'association dans l'objet associé.
3. Créez une méthode utilitaire pour établir l'association dans la classe « non dominante ». La méthode doit utiliser ce qui lui est fourni en paramètres pour renseigner le champ. Donnez à la méthode un nom évident afin qu'elle ne soit pas utilisée plus tard à d'autres fins.
4. Si les anciennes méthodes de contrôle de l'association unidirectionnelle se trouvaient dans la classe « dominante », complétez-les par des appels aux méthodes utilitaires de l'objet associé.
5. Si les anciennes méthodes de contrôle de l'association se trouvaient dans la classe « non dominante », créez les méthodes dans la classe « dominante », appelez-les et déléguez-leur l'exécution.
## Relations

**Opposite refactorings**

- [Transformer une association bidirectionnelle en association unidirectionnelle](/fr/change-bidirectional-association-to-unidirectional.md)

