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 Bate-papo do Copiloto 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.
Observação
As respostas descritas neste artigo são exemplos. Respostas do Bate-papo do Copiloto 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.
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");
What design patterns could improve this code? Don't show me code examples.
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
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");
Refactor this code using the module pattern
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.