{"meta":{"title":"Refactorisation pour implémenter un modèle de conception","intro":"Copilot Chat peut suggérer des modèles de conception que vous pouvez utiliser pour améliorer votre code.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/tutorials","title":"Tutoriels"},{"href":"/fr/copilot/tutorials/copilot-cookbook","title":"livre de recettes GitHub Copilot"},{"href":"/fr/copilot/tutorials/copilot-cookbook/refactor-code","title":"Refactoriser le code"},{"href":"/fr/copilot/tutorials/copilot-cookbook/refactor-code/refactor-design-patterns","title":"Refactoriser les modèles de conception"}],"documentType":"article"},"body":"# Refactorisation pour implémenter un modèle de conception\n\nCopilot Chat peut suggérer des modèles de conception que vous pouvez utiliser pour améliorer votre code.\n\nLe 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.\n\nCopilot 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.\n\n> \\[!NOTE] Les réponses décrites dans cet article sont des exemples.\n> 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.\n\n## Exemple de scénario\n\nCe 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.\n\n```javascript id=person-module\nclass Person {\n  constructor(name, age) {\n    this.name = name;\n    this.age = age;\n  }\n}\n\nvar people = {};\n\nfunction addPerson(name, age) {\n  people[name] = new Person(name, age);\n}\n\nfunction getAge(name) {\n  if (people[name]) {\n    console.log(name + \" is \" + people[name].age + \" years old.\");\n  } else {\n    console.log(\"Person not found.\");\n  }\n}\n\naddPerson(\"Ana\", 30);\naddPerson(\"Mario\", 25);\naddPerson(\"Louise\", 40);\n\ngetAge(\"Mario\");\n```\n\n## Exemple d'invite 1\n\n```copilot copy prompt ref=person-module\nWhat design patterns could improve this code? Don't show me code examples.\n```\n\n## Exemple de réponse 1\n\nCopilot suggère les modèles suivants :\n\n* **Modèle Singleton** : pour vous assurer qu’il n’existe qu’une seule instance de l’objet `people`.\n* **Modèle Factory** : pour créer une fabrique pour la création d’objets `Person`.\n* **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.\n\n## Exemples d’invite 2\n\nVous pouvez maintenant demander à Copilot d’implémenter le schéma que vous jugez le plus approprié.\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## Exemple de réponse 2\n\n```javascript\nconst PersonModule = (function() {\n  class Person {\n    constructor(name, age) {\n      this.name = name;\n      this.age = age;\n    }\n  }\n\n  const people = {};\n\n  function addPerson(name, age) {\n    people[name] = new Person(name, age);\n  }\n\n  function getAge(name) {\n    if (people[name]) {\n      console.log(name + \" is \" + people[name].age + \" years old.\");\n    } else {\n      console.log(\"Person not found.\");\n    }\n  }\n\n  return {\n    addPerson,\n    getAge\n  };\n})();\n\nPersonModule.addPerson(\"Ana\", 30);\nPersonModule.addPerson(\"Mario\", 25);\nPersonModule.addPerson(\"Louise\", 40);\n\nPersonModule.getAge(\"Mario\");\n```\n\nLe 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.\n\n## Lectures complémentaires\n\n* [Ingénierie rapide pour GitHub Copilot Chat](/fr/copilot/concepts/prompting/prompt-engineering)\n* [Meilleures pratiques pour l’utilisation de GitHub Copilot](/fr/copilot/get-started/best-practices)"}