{"meta":{"title":"Refactorización para implementar un patrón de diseño","intro":"El Chat de Copiloto puede sugerir patrones de diseño que puedes usar para mejorar el código.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/tutorials","title":"Tutoriales"},{"href":"/es/copilot/tutorials/copilot-chat-cookbook","title":"Guía de GitHub Copilot Chat"},{"href":"/es/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"Refactorizar código"},{"href":"/es/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-design-patterns","title":"Refactorización de patrones de diseño"}],"documentType":"article"},"body":"# Refactorización para implementar un patrón de diseño\n\nEl Chat de Copiloto puede sugerir patrones de diseño que puedes usar para mejorar el código.\n\nEl código que no sigue los patrones de diseño establecidos (como Singleton, Factory u Observer) puede generar problemas como acoplamiento estricto, falta de flexibilidad o código duplicado.\n\nEl Chat de Copiloto puede ayudarte a usar los patrones de diseño adecuados para que el código sea más flexible y se pueda mantener. Por ejemplo, puede recomendar la conversión de instancias repetitivas en un patrón Factory, o el uso del patrón Observer para desacoplar clases estrechamente conectadas.\n\n> \\[!NOTE] Las respuestas descritas en este artículo son ejemplos. Las respuestas del Chat de Copiloto no son deterministas, por lo que puedes obtener respuestas diferentes a las aquí mostradas.\n\n## Escenario de ejemplo\n\nEste código de JavaScript crea tres objetos `Person`, cada uno con las propiedades `name` y `age`. A continuación, usa el nombre de una persona para recuperar e imprimir su edad.\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## Ejemplo de solicitud 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## Respuesta de ejemplo 1\n\nCopilot sugiere los patrones siguientes:\n\n* **Patrón Singleton**: para garantizar que solo haya una instancia del objeto `people`.\n* **Patrón de Fábrica**: para desarrollar una fábrica que cree objetos `Person`.\n* **Patrón de Módulo**: para encapsular el objeto `people` y las funciones relacionadas dentro de un módulo para evitar la contaminación del espacio de nombres global.\n\n## Ejemplo de mensaje 2\n\nAhora puedes pedir a Copilot que implemente el patrón que consideres más adecuado.\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## Respuesta de ejemplo 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\nEl patrón Module mejora la organización del código y la privacidad de los datos y reduce el riesgo de conflictos de nomenclatura, lo que hace que el código sea más escalable y fácil de mantener.\n\n## Información adicional\n\n* [Ingeniería de mensajes para GitHub Copilot Chat](/es/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [Procedimientos recomendados para usar GitHub Copilot](/es/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}