Skip to main content

Vereinfachung komplexer Vererbungshierarchien

Copilot-Chat kann dir beim Refactoring deines Codes helfen, um Klassen mit mehreren Schichten der Vererbung zu vermeiden.

Tiefe Vererbungshierarchien oder die unsachgemäße Verwendung von Vererbung können zu schwer wartbarem Code führen, da es schwierig ist, die Beziehungen zwischen den Klassen zu verfolgen oder sie zu erweitern, ohne dass es zu Fehlern kommt.

Copilot-Chat kann ein Refactoring von vererbungsbedingten Designs zu flexibleren kompositionsbedingten Designs vorschlagen (wobei Komposition gegenüber Vererbung bevorzugt wird). Es kann auch empfehlen, Muster wie Strategy oder Decorator anzuwenden, um das System erweiterbar zu machen, ohne die Vererbungsstruktur komplexer zu machen.

Beispielszenario

Der folgende C# Code hat eine tiefe Vererbungshierarchie, in der jede Klasse auf der vorherigen aufbaut. Das Ergebnis ist eine lange Vererbungskette, die es schwierig macht, zu wissen, welche Eigenschaften die einzelnen Klassen haben.

Eine mehrstufige Vererbungshierarchie wie diese kann schwer zu verstehen, zu ändern und zu erweitern sein.

public class Employee
{
    public string Name { get; set; }
    public int EmployeeID { get; set; }
}

public class Manager : Employee
{
    public int NumberOfTeams { get; set; }
}

public class SeniorManager : Manager
{
    public string Region { get; set; }
}

public class Director : SeniorManager
{
    public int NumberOfDepartments { get; set; }
}

public class VicePresident : Director
{
    public string Division { get; set; }
}

public class President : VicePresident
{
    public string Company { get; set; }
}

Beispiel für Prompt

In dieser Situation könntest du dich entscheiden, eine übergeordnete Employee Klasse zu verwenden, deren Eigenschaften andere Klassen erben sollen, aber jede andere Vererbung zu vermeiden, indem du alle anderen Eigenschaften für jede Klasse separat definierst.

Copilot Chat prompt
Refactor this code so that classes only inherit the properties of the Employee class. All of the other properties that each class currently inherits should instead be declared independently in each class definition.

Beispielantwort

Hinweis

Die folgende Antwort ist ein Beispiel. Da die Copilot-Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise eine andere Antwort als die hier beschriebene.

Copilot schlägt den folgenden Code vor:

public class Employee
{
    public string Name { get; set; }
    public int EmployeeID { get; set; }
}

public class Manager : Employee
{
    public int NumberOfTeams { get; set; }
}

public class SeniorManager : Employee
{
    public int NumberOfTeams { get; set; }
    public string Region { get; set; }
}

public class Director : Employee
{
    public int NumberOfTeams { get; set; }
    public string Region { get; set; }
    public int NumberOfDepartments { get; set; }
}

public class VicePresident : Employee
{
    public int NumberOfTeams { get; set; }
    public string Region { get; set; }
    public int NumberOfDepartments { get; set; }
    public string Division { get; set; }
}

public class President : Employee
{
    public int NumberOfTeams { get; set; }
    public string Region { get; set; }
    public int NumberOfDepartments { get; set; }
    public string Division { get; set; }
    public string Company { get; set; }
}

Weiterführende Themen