Код, который не соответствует установленным шаблонам проектирования (например, Singleton, Factory или Observer), может привести к таким проблемам, как жесткое связывание, отсутствие гибкости или дублированный код.
Copilot Chat помогает использовать соответствующие шаблоны проектирования, чтобы сделать код более гибким и поддерживаемым. Например, рекомендуется преобразовать повторяющиеся экземпляры в шаблон фабрики или использовать шаблон наблюдателя для тесного соединения классов.
Note
Ответы, описанные в этой статье, являются примерами. Ответы Copilot Chat являются недетерминированными, поэтому вы можете получить различные ответы, показанные здесь.
Пример сценария
Этот код JavaScript создает три Person
объекта, каждый из которых содержит name
и age
свойства. Затем он использует имя человека для получения и печати своего возраста.
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");
Пример запроса 1
What design patterns could improve this code? Don't show me code examples.
Пример ответа 1
Copilot предлагает следующие шаблоны:
- Шаблон singleton: чтобы обеспечить наличие только одного экземпляра
people
объекта. - Шаблон фабрики: создание фабрики для создания
Person
объектов. - Шаблон модуля: чтобы инкапсулировать
people
объект и связанные функции в модуле, чтобы избежать загрязнения глобального пространства имен.
Пример запроса 2
Теперь можно попросить Copilot реализовать шаблон, который вы считаете наиболее подходящим.
Refactor this code using the module pattern
Пример ответа 2
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");
Шаблон модуля улучшает организацию кода, повышает конфиденциальность данных и снижает риск именования конфликтов, что делает код более поддерживаемым и масштабируемым.