# Refactorisation pour implémenter un modèle de conception

Copilot Chat peut suggérer des modèles de conception que vous pouvez utiliser pour améliorer votre code.

Le code qui ne suit pas les modèles de conception établis (comme Singleton, Factory ou Observer) peut entraîner des problèmes tels qu’un fort couplage, un manque de flexibilité ou une duplication de code.

Copilot Chat peut vous aider à utiliser des modèles de conception appropriés pour rendre votre code plus flexible et plus facile à gérer. Par exemple, il peut recommander de convertir des instanciations répétitives en un modèle Factory, ou d’utiliser le modèle Observer pour dissocier des classes étroitement liées.

> \[!NOTE] Les réponses décrites dans cet article sont des exemples.
> Copilot Chat les réponses ne sont pas déterministes. Vous pouvez donc obtenir des réponses différentes des réponses présentées ici.

## Exemple de scénario

Ce code JavaScript crée trois objets `Person`, chacun avec les propriétés `name` et `age`. Il utilise ensuite le nom d’une personne pour récupérer et afficher son âge.

```javascript id=person-module
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

var people = {};

function addPerson(name, age) {
  people[name] = new Person(name, age);
}

function getAge(name) {
  if (people[name]) {
    console.log(name + " is " + people[name].age + " years old.");
  } else {
    console.log("Person not found.");
  }
}

addPerson("Ana", 30);
addPerson("Mario", 25);
addPerson("Louise", 40);

getAge("Mario");
```

## Exemple d'invite 1

```copilot copy prompt ref=person-module
What design patterns could improve this code? Don't show me code examples.
```

## Exemple de réponse 1

Copilot suggère les modèles suivants :

* **Modèle Singleton** : pour vous assurer qu’il n’existe qu’une seule instance de l’objet `people`.
* **Modèle Factory** : pour créer une fabrique pour la création d’objets `Person`.
* **Modèle Module** : pour encapsuler l’objet `people` et les fonctions associées dans un module afin d’éviter de polluer l’espace de noms global.

## Exemples d’invite 2

Vous pouvez maintenant demander à Copilot d’implémenter le schéma que vous jugez le plus approprié.

```copilot copy prompt ref=person-module
Refactor this code using the module pattern
```

## Exemple de réponse 2

```javascript
const PersonModule = (function() {
  class Person {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
  }

  const people = {};

  function addPerson(name, age) {
    people[name] = new Person(name, age);
  }

  function getAge(name) {
    if (people[name]) {
      console.log(name + " is " + people[name].age + " years old.");
    } else {
      console.log("Person not found.");
    }
  }

  return {
    addPerson,
    getAge
  };
})();

PersonModule.addPerson("Ana", 30);
PersonModule.addPerson("Mario", 25);
PersonModule.addPerson("Louise", 40);

PersonModule.getAge("Mario");
```

Le modèle Module améliore l’organisation du code, optimise la confidentialité des données et réduit le risque de conflits de noms, ce qui rend le code plus facile à maintenir et à faire évoluer.

## Lectures complémentaires

* [Ingénierie rapide pour GitHub Copilot Chat](/fr/copilot/concepts/prompting/prompt-engineering)
* [Meilleures pratiques pour l’utilisation de GitHub Copilot](/fr/copilot/get-started/best-practices)