# Refactoring zum Implementieren eines Entwurfsmusters

Copilot Chat kann Entwurfsmuster vorschlagen, mit denen Sie Ihren Code verbessern können.

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 Ihnen dabei helfen, geeignete Entwurfsmuster zu verwenden, um Ihren Code flexibler und wartungsfähiger zu machen. So kann es beispielsweise empfehlen, sich wiederholende Instanziierungen in ein Factorymuster zu konvertieren oder das Beobachtermuster zu verwenden, um eng verbundene Klassen zu entkoppeln.

> \[!NOTE] Bei den in diesem Artikel beschriebenen Antworten handelt es sich um Beispiele.
> Copilot Chat Antworten sind nicht deterministisch, daher erhalten Sie möglicherweise unterschiedliche Antworten von den hier gezeigten Antworten.

## 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.

```javascript id=person-module
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

```copilot copy prompt ref=person-module
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
* **Fabrikmuster**: um eine Fabrik zum Erstellen von `Person`-Objekten zu erzeugen
* **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

Sie können Copilot jetzt bitten, das Muster zu implementieren, das Sie für am besten geeignet halten.

```copilot copy prompt ref=person-module
Refactor this code using the module pattern
```

## Beispielantwort 2

```javascript
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.

## Weiterführende Lektüre

* [Prompt-Engineering für GitHub Copilot Chat](/de/copilot/concepts/prompting/prompt-engineering)
* [Bewährte Methoden für die Verwendung von GitHub Copilot](/de/copilot/get-started/best-practices)