Transformer une association bidirectionnelle en association unidirectionnelle.
Vous avez une association bidirectionnelle entre des classes, mais l'une des classes n'utilise pas les fonctionnalités de l'autre.
Supprimez l'association inutilisée.
##Example
##Why Refactor
Une association bidirectionnelle est généralement plus difficile à maintenir qu'une association unidirectionnelle, car elle nécessite du code supplémentaire pour créer et supprimer correctement les objets concernés. Cela rend le programme plus compliqué.
De plus, une association bidirectionnelle mal implémentée peut causer des problèmes pour le ramasse-miettes (garbage collection) (entraînant à son tour un gonflement de la mémoire par des objets inutilisés).
Exemple : le ramasse-miettes retire de la mémoire les objets qui ne sont plus référencés par d'autres objets. Supposons qu'une paire d'objets User-Order ait été créée, utilisée, puis abandonnée. Mais ces objets ne seront pas libérés de la mémoire puisqu'ils se référencent encore mutuellement. Cela dit, ce problème devient de moins en moins important grâce aux progrès des langages de programmation, qui identifient désormais automatiquement les références d'objets inutilisées et les retirent de la mémoire.
Il y a aussi le problème de l'interdépendance entre les classes. Dans une association bidirectionnelle, les deux classes doivent se connaître mutuellement, ce qui signifie qu'elles ne peuvent pas être utilisées séparément. Si de nombreuses associations de ce type sont présentes, différentes parties du programme deviennent trop dépendantes les unes des autres, et toute modification d'un composant peut affecter les autres composants.
##Benefits
-
Simplifie la classe qui n'a pas besoin de la relation. Moins de code signifie moins de maintenance de code.
-
Réduit la dépendance entre les classes. Les classes indépendantes sont plus faciles à maintenir, car toute modification d'une classe n'affecte que cette classe.
##How to Refactor
-
Assurez-vous que l'une des conditions suivantes est vraie pour vos classes :
-
Aucune association n'est utilisée.
-
Il existe un autre moyen d'obtenir l'objet associé, par exemple via une requête en base de données.
-
L'objet associé peut être passé en argument aux méthodes qui l'utilisent.
-
-
Selon votre situation, l'utilisation d'un champ contenant une association avec un autre objet doit être remplacée par un paramètre ou un appel de méthode permettant d'obtenir l'objet d'une autre manière.
-
Supprimez le code qui affecte l'objet associé au champ.
-
Supprimez le champ désormais inutilisé.