---
title: "Préserver l'objet entier"
type: "refactoring-technique"
slug: "preserve-whole-object"
url: "http://localhost:3000/fr/preserve-whole-object.md"
category: "Simplifying Method Calls"
description: "Problème : vous récupérez plusieurs valeurs d'un objet, puis vous les passez comme paramètres à une méthode. Solution : essayez plutôt de passer l'objet entier."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Préserver l'objet entier

> Problème : vous récupérez plusieurs valeurs d'un objet, puis vous les passez comme paramètres à une méthode. Solution : essayez plutôt de passer l'objet entier.

## Problem

Vous récupérez plusieurs valeurs d'un objet, puis vous les passez comme paramètres à une méthode.

## Solution

Essayez plutôt de passer l'objet entier.

## Why Refactor

Le problème est qu'avant chaque appel de votre méthode, il faut appeler les méthodes du futur objet paramètre. Si ces méthodes ou la quantité de données obtenue pour la méthode changent, vous devrez retrouver soigneusement une douzaine de tels endroits dans le programme et y appliquer ces modifications dans chacun d'eux.

Une fois cette technique de remaniement appliquée, le code permettant d'obtenir toutes les données nécessaires sera rassemblé à un seul endroit — la méthode elle-même.

## Benefits

* Au lieu d'un fouillis de paramètres, vous voyez un objet unique doté d'un nom compréhensible.
* Si la méthode a besoin de davantage de données issues d'un objet, vous n'aurez pas à réécrire tous les endroits où la méthode est utilisée — seulement l'intérieur de la méthode elle-même.

## How to Refactor

1. Créez dans la méthode un paramètre pour l'objet à partir duquel vous pouvez obtenir les valeurs nécessaires.
2. Commencez maintenant à retirer un à un les anciens paramètres de la méthode, en les remplaçant par des appels aux méthodes correspondantes de l'objet paramètre. Testez le programme après chaque remplacement de paramètre.
3. Supprimez le code des accesseurs (getters) de l'objet paramètre qui précédait l'appel de la méthode.
## Relations

**Similar techniques**

- [Introduire un objet paramètre](/fr/introduce-parameter-object.md)
- [Remplacer un paramètre par un appel de méthode](/fr/replace-parameter-with-method-call.md)

**Eliminates smells**

- [Obsession des types primitifs](/fr/smells/primitive-obsession.md)
- [Liste de paramètres trop longue](/fr/smells/long-parameter-list.md)
- [Méthode longue](/fr/smells/long-method.md)
- [Amas de données](/fr/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);
```

