Skip to main content

Simplificación de jerarquías de herencia complejas

Copilot Chat puede ayudarte a refactorizar el código para evitar clases con varias capas de herencia.

Las jerarquías de herencia profunda, o el uso incorrecto de la herencia, pueden provocar código difícil de mantener, lo que dificulta seguir las relaciones entre clases o ampliarlas sin provocar interrupciones.

Copilot Chat puede sugerir refactorizar los diseños basados en la herencia en diseños basados en la composición, más flexibles (favoreciendo la composición sobre la herencia). También puede recomendar aplicar patrones como Strategy o Decorator para que el sistema sea más extensible sin agregar complejidad a la estructura de herencia.

Escenario de ejemplo

El siguiente código de C# tiene una jerarquía de herencia profunda donde cada clase se basa en la anterior. El resultado es una cadena larga de herencia que dificulta saber qué propiedades tiene cada clase.

Una jerarquía de herencia de varios niveles como esta puede ser difícil de entender, modificar y ampliar.

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; }
}

Ejemplos de indicaciones

En esta situación, podrías optar por usar una clase principal Employee cuyas propiedades hereden otras clases, pero evitar cualquier otra herencia definiendo todas las demás propiedades por separado para cada clase.

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.

Respuesta de ejemplo

Note

La respuesta siguiente es un ejemplo. Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.

Copilot sugiere el siguiente código:

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; }
}

Información adicional