{"meta":{"title":"Refatorando para implementar um padrão de design","intro":"O Bate-papo do Copilot pode sugerir padrões de design que você pode usar para aprimorar seu código.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/copilot","title":"GitHub Copilot"},{"href":"/pt/copilot/tutorials","title":"Tutoriais"},{"href":"/pt/copilot/tutorials/copilot-chat-cookbook","title":"Livro de Receitas do GitHub Copilot Chat"},{"href":"/pt/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"Refatorar o código"},{"href":"/pt/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-design-patterns","title":"Refatorar padrões de design"}],"documentType":"article"},"body":"# Refatorando para implementar um padrão de design\n\nO Bate-papo do Copilot pode sugerir padrões de design que você pode usar para aprimorar seu código.\n\nCódigo que não segue os padrões de design estabelecidos (como Singleton, Factory ou Observer) pode levar a problemas como acoplamento estrito, falta de flexibilidade ou código duplicado.\n\nO Bate-papo do Copilot pode ajudar você a usar padrões de design apropriados para tornar seu código mais flexível e fácil de manter. Por exemplo, é recomendável converter instanciações repetitivas em um padrão Factory ou usar o padrão Observer para desacoplar classes estritamente conectadas.\n\n> \\[!NOTE] As respostas descritas neste artigo são exemplos. Respostas do Bate-papo do Copilot são não determinísticas, portanto, você pode obter respostas diferentes das mostradas aqui.\n\n## Cenário de exemplo\n\nEste código JavaScript cria três objetos `Person`, cada um com propriedades `name` e `age`. Depois, ele usa o nome de uma pessoa para obter e imprimir a idade dela.\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## Exemplo de prompt 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## Exemplo de resposta 1\n\nO Copilot sugere os seguintes padrões:\n\n* **Padrão Singleton**: para garantir que haja apenas uma instância do objeto `people`.\n* **Padrão Factory**: para desenvolver uma fábrica que cria objetos `Person`.\n* **Padrão Module**: para encapsular o objeto `people` e as funções relacionadas em um módulo para evitar a poluição do namespace global.\n\n## Exemplo de prompt 2\n\nAgora, você pode pedir que o Copilot implemente o padrão que você acha mais apropriado.\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## Exemplo de resposta 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\nO padrão de módulo aprimora a organização do código, aumenta a privacidade de dados e reduz o risco de conflitos de nomenclatura, tornando o código mais fácil de manter e escalar.\n\n## Leitura adicional\n\n* [Engenharia de prompts para o GitHub Copilot Chat](/pt/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [Práticas recomendadas para usar GitHub Copilot](/pt/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}