---
title: "Mudar Valor para Referência"
type: "refactoring-technique"
slug: "change-value-to-reference"
url: "http://localhost:3000/pt-br/change-value-to-reference.md"
category: "Organizing Data"
description: "Problema: Você tem muitas instâncias idênticas de uma mesma classe que precisa substituir por um único objeto. Solução: Converta os objetos idênticos em um único objeto de referência."
---
# Mudar Valor para Referência

> Problema: Você tem muitas instâncias idênticas de uma mesma classe que precisa substituir por um único objeto. Solução: Converta os objetos idênticos em um único objeto de referência.

## Problem

Você tem muitas instâncias idênticas de uma mesma classe que precisa substituir por um único objeto.

## Solution

Converta os objetos idênticos em um único objeto de referência.

## Why Refactor

Em muitos sistemas, os objetos podem ser classificados como valores ou referências.

* **Referências**: quando um objeto do mundo real corresponde a apenas um objeto no programa. Referências costumam ser objetos como usuário/pedido/produto/etc.
* **Valores**: um objeto do mundo real corresponde a vários objetos no programa. Esses objetos podem ser datas, números de telefone, endereços, cores e afins.

A escolha entre referência e valor nem sempre é evidente. Às vezes existe um valor simples com uma pequena quantidade de dados imutáveis. Então passa a ser necessário adicionar dados mutáveis e propagar essas alterações sempre que o objeto é acessado. Nesse caso, torna-se necessário convertê-lo em uma referência.

## Benefits

* Um objeto contém todas as informações mais atuais sobre uma determinada entidade. Se o objeto for alterado em uma parte do programa, essas alterações ficam acessíveis às demais partes do programa que utilizam o objeto.

## How to Refactor

1. Use [Substituir Construtor por Método de Fábrica](/pt-br/replace-constructor-with-factory-method) na classe a partir da qual as referências serão geradas.
2. Determine qual objeto será responsável por fornecer acesso às referências. Em vez de criar um novo objeto, quando precisar de um você agora deve obtê-lo de um objeto de armazenamento ou de um campo de dicionário estático.
3. Determine se as referências serão criadas com antecedência ou dinamicamente, conforme a necessidade. Se os objetos forem criados com antecedência, certifique-se de carregá-los antes do uso.
4. Altere o método de fábrica para que retorne uma referência. Se os objetos forem criados com antecedência, decida como tratar os erros quando um objeto inexistente for solicitado. Talvez você também precise usar [Renomear Método](/pt-br/rename-method) para indicar que o método retorna apenas objetos existentes.
## Relations

**Opposite refactorings**

- [Mudar Referência para Valor](/pt-br/change-reference-to-value.md)

