---
title: "Reemplazar valor de datos por objeto"
type: "refactoring-technique"
slug: "replace-data-value-with-object"
url: "http://localhost:3000/es/replace-data-value-with-object.md"
category: "Organizing Data"
description: "Problema: Una clase (o grupo de clases) contiene un campo de datos. El campo tiene su propio comportamiento y datos asociados. Solución: Crea una nueva clase, coloca en ella el antiguo campo y su comportamiento, y almacena el objeto de la clase dentro de la clase original."
---
# Reemplazar valor de datos por objeto

> Problema: Una clase (o grupo de clases) contiene un campo de datos. El campo tiene su propio comportamiento y datos asociados. Solución: Crea una nueva clase, coloca en ella el antiguo campo y su comportamiento, y almacena el objeto de la clase dentro de la clase original.

## Problem

Una clase (o grupo de clases) contiene un campo de datos. El campo tiene su propio comportamiento y datos asociados.

## Solution

Crea una nueva clase, coloca en ella el antiguo campo y su comportamiento, y almacena el objeto de la clase dentro de la clase original.

## Why Refactor

Esta refactorización es básicamente un caso especial de [Extraer clase](/es/extract-class). Lo que la diferencia es el motivo de la refactorización.

En [Extraer clase](/es/extract-class), tenemos una sola clase que es responsable de diferentes cosas y queremos repartir sus responsabilidades.

Con la sustitución de un valor de datos por un objeto, tenemos un campo primitivo (número, cadena, etc.) que ya no es tan simple debido al crecimiento del programa y que ahora tiene datos y comportamientos asociados. Por un lado, estos campos no tienen nada de inquietante en sí mismos. Sin embargo, esta familia de campos y comportamientos puede estar presente en varias clases a la vez, creando código duplicado.

Por todo ello, creamos una nueva clase y trasladamos a ella tanto el campo como los datos y comportamientos relacionados.

## Benefits

* Mejora la cohesión dentro de las clases. Los datos y los comportamientos relevantes están dentro de una sola clase.

## How to Refactor

Antes de empezar a refactorizar, comprueba si hay referencias directas al campo desde dentro de la clase. Si las hay, usa [Autoencapsular campo](/es/self-encapsulate-field) para ocultarlo en la clase original.

1. Crea una nueva clase y copia en ella tu campo y el getter correspondiente. Además, crea un constructor que acepte el valor simple del campo. Esta clase no tendrá setter, ya que cada nuevo valor de campo que se envíe a la clase original creará un nuevo objeto de valor.
2. En la clase original, cambia el tipo del campo a la nueva clase.
3. En el getter de la clase original, invoca el getter del objeto asociado.
4. En el setter, crea un nuevo objeto de valor. Es posible que también debas crear un nuevo objeto en el constructor si allí se habían establecido previamente valores iniciales para el campo.
## Relations

**Similar techniques**

- [Extraer clase](/es/extract-class.md)
- [Introducir Objeto Parámetro](/es/introduce-parameter-object.md)
- [Reemplazar Array con Objeto](/es/replace-array-with-object.md)
- [Reemplazar método con objeto-método](/es/replace-method-with-method-object.md)

**Eliminates smells**

- [Código Duplicado](/es/smells/duplicate-code.md)

