---
title: "Preservar o Objeto Inteiro"
type: "refactoring-technique"
slug: "preserve-whole-object"
url: "http://localhost:3000/pt-br/preserve-whole-object.md"
category: "Simplifying Method Calls"
description: "Problema: Você obtém vários valores de um objeto e depois os passa como parâmetros para um método. Solução: Em vez disso, tente passar o objeto inteiro."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Preservar o Objeto Inteiro

> Problema: Você obtém vários valores de um objeto e depois os passa como parâmetros para um método. Solução: Em vez disso, tente passar o objeto inteiro.

## Problem

Você obtém vários valores de um objeto e depois os passa como parâmetros para um método.

## Solution

Em vez disso, tente passar o objeto inteiro.

## Why Refactor

O problema é que, toda vez antes de o seu método ser chamado, os métodos do futuro objeto de parâmetro precisam ser chamados. Se esses métodos ou a quantidade de dados obtidos para o método forem alterados, você terá que encontrar cuidadosamente uma dúzia desses lugares no programa e implementar essas alterações em cada um deles.

Depois de aplicar essa técnica de refatoração, o código para obter todos os dados necessários ficará armazenado em um único lugar—o próprio método.

## Benefits

* Em vez de uma mistura confusa de parâmetros, você vê um único objeto com um nome compreensível.
* Se o método precisar de mais dados de um objeto, você não precisará reescrever todos os lugares onde o método é usado—apenas dentro do próprio método.

## How to Refactor

1. Crie no método um parâmetro para o objeto do qual você pode obter os valores necessários.
2. Agora comece a remover os antigos parâmetros do método um a um, substituindo-os por chamadas aos métodos correspondentes do objeto de parâmetro. Teste o programa após cada substituição de um parâmetro.
3. Exclua o código do getter do objeto de parâmetro que precedia a chamada do método.
## Relations

**Similar techniques**

- [Introduzir Objeto de Parâmetro](/pt-br/introduce-parameter-object.md)
- [Substituir Parâmetro por Chamada de Método](/pt-br/replace-parameter-with-method-call.md)

**Eliminates smells**

- [Obsessão por Primitivos](/pt-br/smells/primitive-obsession.md)
- [Lista de Parâmetros Longa](/pt-br/smells/long-parameter-list.md)
- [Método Longo](/pt-br/smells/long-method.md)
- [Aglomerados de Dados](/pt-br/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);
```

