---
title: "Preservar el Objeto Completo"
type: "refactoring-technique"
slug: "preserve-whole-object"
url: "http://localhost:3000/es/preserve-whole-object.md"
category: "Simplifying Method Calls"
description: "Problema: Obtienes varios valores de un objeto y después los pasas como parámetros a un método. Solución: En lugar de eso, intenta pasar el objeto completo."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Preservar el Objeto Completo

> Problema: Obtienes varios valores de un objeto y después los pasas como parámetros a un método. Solución: En lugar de eso, intenta pasar el objeto completo.

## Problem

Obtienes varios valores de un objeto y después los pasas como parámetros a un método.

## Solution

En lugar de eso, intenta pasar el objeto completo.

## Why Refactor

El problema es que, cada vez que se llama a tu método, antes hay que llamar a los métodos del futuro objeto parámetro. Si estos métodos o la cantidad de datos que se obtienen para el método cambian, tendrás que localizar cuidadosamente una docena de lugares así en el programa e implementar estos cambios en cada uno de ellos.

Después de aplicar esta técnica de refactorización, el código para obtener todos los datos necesarios estará almacenado en un único lugar: el propio método.

## Benefits

* En lugar de un revoltijo de parámetros, ves un único objeto con un nombre comprensible.
* Si el método necesita más datos de un objeto, no tendrás que reescribir todos los lugares donde se usa el método, sino únicamente el interior del propio método.

## How to Refactor

1. Crea un parámetro en el método para el objeto del que puedes obtener los valores necesarios.
2. Ahora empieza a eliminar los antiguos parámetros del método uno a uno, sustituyéndolos por llamadas a los métodos correspondientes del objeto parámetro. Prueba el programa después de sustituir cada parámetro.
3. Elimina el código del getter del objeto parámetro que precedía a la llamada al método.
## Relations

**Similar techniques**

- [Introducir Objeto Parámetro](/es/introduce-parameter-object.md)
- [Sustituir parámetro por llamada a método](/es/replace-parameter-with-method-call.md)

**Eliminates smells**

- [Obsesión por los tipos primitivos](/es/smells/primitive-obsession.md)
- [Lista de Parámetros Larga](/es/smells/long-parameter-list.md)
- [Método Largo](/es/smells/long-method.md)
- [Grupos de datos](/es/smells/data-clumps.md)

## Code Examples

### java

```java
// Before
int low = daysTempRange.getLow();
int high = daysTempRange.getHigh();
boolean withinPlan = plan.withinRange(low, high);

// After
boolean withinPlan = plan.withinRange(daysTempRange);
```

### csharp

```csharp
// Before
int low = daysTempRange.GetLow();
int high = daysTempRange.GetHigh();
bool withinPlan = plan.WithinRange(low, high);

// After
bool withinPlan = plan.WithinRange(daysTempRange);
```

### php

```php
// Before
$low = $daysTempRange->getLow();
$high = $daysTempRange->getHigh();
$withinPlan = $plan->withinRange($low, $high);

// After
$withinPlan = $plan->withinRange($daysTempRange);
```

### python

```python
// Before
low = daysTempRange.getLow()
high = daysTempRange.getHigh()
withinPlan = plan.withinRange(low, high)

// After
withinPlan = plan.withinRange(daysTempRange)
```

### typescript

```typescript
// Before
let low = daysTempRange.getLow();
let high = daysTempRange.getHigh();
let withinPlan = plan.withinRange(low, high);

// After
let withinPlan = plan.withinRange(daysTempRange);
```

