---
title: "Remplacer un tableau par un objet"
type: "refactoring-technique"
slug: "replace-array-with-object"
url: "http://localhost:3000/fr/replace-array-with-object.md"
category: "Organizing Data"
description: "Problème : Vous avez un tableau qui contient différents types de données. Solution : Remplacez le tableau par un objet qui aura des champs distincts pour chaque élément."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Remplacer un tableau par un objet

> Problème : Vous avez un tableau qui contient différents types de données. Solution : Remplacez le tableau par un objet qui aura des champs distincts pour chaque élément.

## Problem

Vous avez un tableau qui contient différents types de données.

## Solution

Remplacez le tableau par un objet qui aura des champs distincts pour chaque élément.

## Why Refactor

Les tableaux sont un excellent outil pour stocker des données et des collections d'un seul type. Mais si vous utilisez un tableau comme des cases de bureau de poste, en stockant le nom d'utilisateur dans la case 1 et l'adresse de l'utilisateur dans la case 14, vous finirez un jour par le regretter amèrement. Cette approche conduit à des défaillances catastrophiques lorsque quelqu'un met quelque chose dans la mauvaise « case » et exige également votre temps pour déterminer quelle donnée est stockée où.

## Benefits

* Dans la classe résultante, vous pouvez placer tous les comportements associés qui étaient auparavant stockés dans la classe principale ou ailleurs.
* Les champs d'une classe sont bien plus faciles à documenter que les éléments d'un tableau.

## How to Refactor

1. Créez la nouvelle classe qui contiendra les données du tableau. Placez le tableau lui-même dans la classe sous forme de champ public.
2. Créez un champ pour stocker l'objet de cette classe dans la classe d'origine. N'oubliez pas de créer également l'objet lui-même à l'endroit où vous initialisiez le tableau de données.
3. Dans la nouvelle classe, créez des méthodes d'accès une par une pour chacun des éléments du tableau. Donnez-leur des noms explicites qui indiquent ce qu'elles font. En même temps, remplacez chaque utilisation d'un élément du tableau dans le code principal par la méthode d'accès correspondante.
4. Une fois les méthodes d'accès créées pour tous les éléments, rendez le tableau privé.
5. Pour chaque élément du tableau, créez un champ privé dans la classe, puis modifiez les méthodes d'accès afin qu'elles utilisent ce champ au lieu du tableau.
6. Une fois toutes les données déplacées, supprimez le tableau.
## Relations

**Similar techniques**

- [Remplacer une donnée par un objet](/fr/replace-data-value-with-object.md)

**Eliminates smells**

- [Obsession des types primitifs](/fr/smells/primitive-obsession.md)

## Code Examples

### java

```java
// Before
String[] row = new String[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

### csharp

```csharp
// Before
string[] row = new string[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.SetName("Liverpool");
row.SetWins("15");
```

### php

```php
// Before
$row = [];
$row[0] = "Liverpool";
$row[1] = 15;

// After
$row = new Performance;
$row->setName("Liverpool");
$row->setWins(15);
```

### python

```python
// Before
row = [None * 2]
row[0] = "Liverpool"
row[1] = "15"

// After
row = Performance()
row.setName("Liverpool")
row.setWins("15")
```

### typescript

```typescript
// Before
let row = new Array(2);
row[0] = "Liverpool";
row[1] = "15";

// After
let row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

