Transformer une association unidirectionnelle en bidirectionnelle.
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.
Ajoutez l'association manquante à la classe qui en a besoin.
##Example
##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
-
Ajoutez un champ pour contenir l'association inverse.
-
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é.
-
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.
-
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é.
-
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.