Có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.
O Copilot Chat 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.
Note
As respostas descritas neste artigo são exemplos. Respostas do Copilot Chat são não determinísticas, portanto, você pode obter respostas diferentes das mostradas aqui.
Cenário de exemplo
Este código JavaScript cria três objetos Person
, cada um com propriedades name
e age
. Depois, ele usa o nome de uma pessoa para recuperar e imprimir a idade dela.
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");
Exemplo de prompt 1
What design patterns could improve this code? Don't show me code examples.
Exemplo de resposta 1
O Copilot sugere os seguintes padrões:
- Padrão Singleton: para garantir que haja apenas uma instância do objeto
people
. - Padrão Factory: para criar uma fábrica para criar objetos
Person
. - 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.
Exemplo de prompt 2
Agora, você pode pedir que o Copilot implemente o padrão que você acha mais apropriado.
Refactor this code using the module pattern
Exemplo de resposta 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");
O 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.