Code, der keinem etablierten Entwurfsmuster entspricht (z. B. Singleton, Factory oder Observer), kann zu Problemen wie enger Kopplung, mangelnder Flexibilität oder dupliziertem Code führen.
Copilot-Chat kann dir beim Verwenden geeigneter Entwurfsmuster helfen, um deinen Code flexibler und wartbarer zu gestalten. Beispielsweise wird empfohlen, sich wiederholende Instanziierungen in ein Factorymuster zu konvertieren oder das Observer-Muster zu verwenden, um eng verbundene Klassen zu entkoppeln.
Hinweis
Bei den in diesem Artikel beschriebenen Antworten handelt es sich um Beispiele. Da die Copilot-Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise andere Antworten als die hier dargestellten.
Beispielszenario
Mit diesem JavaScript-Code werden dreiPerson-Objekte jeweils mitname- undage-Eigenschaften erstellt. Anschließend wird der Name einer Person verwendet, um ihr Alter abzurufen und zu anzugeben.
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");
Beispielprompt 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.
Beispielantwort 1
Copilot schlägt die folgenden Muster vor:
- Singleton-Muster: Um sicherzustellen, dass nur eine Instanz des
people-Objekts vorhanden ist - Factorymuster: Um eine Factory zum Erstellen von
Person-Objekten zu erstellen - Modulmuster: Um das
people-Objekt und die zugehörigen Funktionen in einem Modul zu kapseln und so das Verunreinigen des globalen Namespaces zu vermeiden
Beispielprompt 2
Du kannst Copilot jetzt dazu auffordern, das deiner Meinung nach geeignetste Muster zu implementieren.
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
Beispielantwort 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");
Das Modulmuster verbessert die Codeorganisation und den Datenschutz und reduziert das Risiko von Benennungskonflikten, wodurch der Code wartbarer und skalierbarer wird.