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.
Note
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 drei Person
-Objekte jeweils mit name
- und age
-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.
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
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.