ConstructiCat Logo
CodeBust.
Browse section ▾

Transformer une valeur en référence.

Problem

Vous avez de nombreuses instances identiques d'une même classe que vous devez remplacer par un seul objet.

Solution

Convertissez les objets identiques en un unique objet de référence.

##Example

Avant
Order Customer 1
Après
Order Customer *1

##Why Refactor

Dans de nombreux systèmes, les objets peuvent être classés soit comme des valeurs, soit comme des références.

  • Références : lorsqu'un objet du monde réel ne correspond qu'à un seul objet dans le programme. Les références sont généralement des objets utilisateur/commande/produit/etc.

  • Valeurs : un objet du monde réel correspond à plusieurs objets dans le programme. Ces objets peuvent être des dates, des numéros de téléphone, des adresses, des couleurs, et ainsi de suite.

Le choix entre référence et valeur n'est pas toujours évident. Parfois, on a une simple valeur comportant une petite quantité de données invariables. Il devient alors nécessaire d'ajouter des données modifiables et de propager ces modifications à chaque accès à l'objet. Dans ce cas, il devient nécessaire de le convertir en référence.

##Benefits

  • Un objet contient toutes les informations les plus à jour sur une entité donnée. Si l'objet est modifié dans une partie du programme, ces modifications sont accessibles depuis les autres parties du programme qui utilisent l'objet.

##How to Refactor

  1. Utilisez Remplacer un constructeur par une méthode de fabrique sur la classe à partir de laquelle les références doivent être générées.

  2. Déterminez quel objet sera chargé de fournir l'accès aux références. Au lieu de créer un nouvel objet lorsque vous en avez besoin, vous devez désormais l'obtenir à partir d'un objet de stockage ou d'un champ de dictionnaire statique.

  3. Déterminez si les références seront créées à l'avance ou dynamiquement selon les besoins. Si les objets sont créés à l'avance, veillez à les charger avant utilisation.

  4. Modifiez la méthode de fabrique pour qu'elle renvoie une référence. Si les objets sont créés à l'avance, décidez de la manière de gérer les erreurs lorsqu'un objet inexistant est demandé. Vous devrez peut-être aussi utiliser Renommer une méthode pour signaler que la méthode ne renvoie que des objets existants.