{"meta":{"title":"Рефакторинг для реализации шаблона конструктора","intro":"Copilot Chat могу предложить шаблоны дизайна, которые можно использовать для улучшения кода.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/tutorials","title":"Учебники"},{"href":"/ru/copilot/tutorials/copilot-cookbook","title":"Кулинарная книга GitHub Copilot"},{"href":"/ru/copilot/tutorials/copilot-cookbook/refactor-code","title":"Код рефакторинга"},{"href":"/ru/copilot/tutorials/copilot-cookbook/refactor-code/refactor-design-patterns","title":"Шаблоны проектирования рефакторинга"}],"documentType":"article"},"body":"# Рефакторинг для реализации шаблона конструктора\n\nCopilot Chat могу предложить шаблоны дизайна, которые можно использовать для улучшения кода.\n\nКод, который не соответствует установленным шаблонам проектирования (например, Singleton, Factory или Observer), может привести к таким проблемам, как жесткое связывание, отсутствие гибкости или дублированный код.\n\nCopilot Chat может помочь вам использовать подходящие шаблоны проектирования, чтобы сделать ваш код более гибким и поддерживаемым. Например, рекомендуется преобразовать повторяющиеся экземпляры в шаблон фабрики или использовать шаблон наблюдателя для тесного соединения классов.\n\n> \\[!NOTE] Ответы, описанные в этой статье, являются примерами.\n> Copilot Chat Ответы не детерминированы, поэтому вы можете получить другие ответы, чем показаны здесь.\n\n## Пример сценария\n\nЭтот код JavaScript создает три `Person` объекта, каждый из которых содержит `name` и `age` свойства. Затем он использует имя человека для получения и печати своего возраста.\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## Пример запроса 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## Пример ответа 1\n\nCopilot предлагает следующие закономерности:\n\n* **Шаблон singleton:** чтобы обеспечить наличие только одного экземпляра `people` объекта.\n* **Шаблон фабрики:** создание фабрики для создания `Person` объектов.\n* **Шаблон модуля:** чтобы инкапсулировать `people` объект и связанные функции в модуле, чтобы избежать загрязнения глобального пространства имен.\n\n## Пример запроса 2\n\nТеперь вы можете попросить Copilot реализовать тот узор, который считаете наиболее подходящим.\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## Пример ответа 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\nШаблон модуля улучшает организацию кода, повышает конфиденциальность данных и снижает риск именования конфликтов, что делает код более поддерживаемым и масштабируемым.\n\n## Дополнительные материалы\n\n* [Инженерия подсказок для GitHub Copilot Chat](/ru/copilot/concepts/prompting/prompt-engineering)\n* [Лучшие практики использования GitHub Copilot](/ru/copilot/get-started/best-practices)"}