es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hago que un método devuelva una de las clases casi iguales caso por caso?

Estoy integrando un nuevo método de pago en nuestro proyecto de servicio. Codifiqué todo. Ahora quiero que sea conveniente para los principios sólidos. Sin embargo, estoy atascado en cómo superar un caso.
Nuestro servicio ya tiene un método llamado GetPaymentProfile que devuelve una clase llamada PaymentProfile. Después de la integración, tuve que agregar un nuevo PaymentProfile y método, porque esta nueva clase tiene una nueva propiedad.

Debido a esto, tengo dos clases y dos métodos. Cada paso se codifica dos veces innecesariamente. Solo quiero que me aconsejes cómo puedo superar esto.

Método y clase preexistentes:

public class PaymentProfile
{
public String Property1 = “”;
public String Property2 = “”;
public String Property3 = “”;
public String Property4 = “”;
}

public PaymentProfile GetPaymentProfile(long aTicketType) {..}

Clase y método obtenidos después de la integración:

public class PayCorePaymentProfile
{
public String Property1 = “”;
public String Property2 = “”;
public String Property3 = “”;
public String Property4 = “”;
public String Property5 = “”;
}

public PayCorePaymentProfile GetPayCorePaymentProfile(long aTicketType) {..}

Lo que pensé:

Crear una clase base y luego vincular todas las subclases con esta clase base, pero creo que no es adecuado para este caso. Porque devolvería esta clase base sin la nueva propiedad.

Si pongo todo en esta clase base, el modelo antiguo tiene una nueva propiedad innecesariamente.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una sugerencia para superar este problema es utilizar el principio SOLID de Segregación de Interfaces. Puedes crear una interfaz que defina las propiedades y métodos comunes para las clases PaymentProfile y PayCorePaymentProfile, y luego hacer que ambas implementen esta interfaz.

    De esta manera, todavía puedes usar el método GetPaymentProfile para recuperar la clase PaymentProfile, y tener un método separado GetPayCorePaymentProfile para recuperar la clase PayCorePaymentProfile. Sin embargo, ambas clases compartirán la misma interfaz, para que puedas tener un enfoque más generalizado para manejarlas en tu código.

    Aquí hay un ejemplo de cómo puedes implementar esto:

    public interface IPaymentProfile
    {
        String Property1 { get; set; }
        String Property2 { get; set; }
        String Property3 { get; set; }
        String Property4 { get; set; }
    }
    
    public class PaymentProfile : IPaymentProfile
    {
        public String Property1 { get; set; } = "";
        public String Property2 { get; set; } = "";
        public String Property3 { get; set; } = "";
        public String Property4 { get; set; } = "";
    }
    
    public class PayCorePaymentProfile : IPaymentProfile
    {
        public String Property1 { get; set; } = "";
        public String Property2 { get; set; } = "";
        public String Property3 { get; set; } = "";
        public String Property4 { get; set; } = "";
        public String Property5 { get; set; } = "";
    }
    
    public PaymentProfile GetPaymentProfile(long aTicketType) {...}
    
    public PayCorePaymentProfile GetPayCorePaymentProfile(long aTicketType) {...}
    

    Con esta implementación, todavía puedes usar el método GetPaymentProfile tal como está y devolverá la clase PaymentProfile. Si necesitas recuperar la clase PayCorePaymentProfile con su campo extra Property5, puedes utilizar en su lugar el método GetPayCorePaymentProfile.

    Cuando necesites acceder a las propiedades y métodos comunes de ambas clases, puedes utilizar la interfaz IPaymentProfile en lugar de las clases concretas. De esta manera, puedes escribir un código más generalizado y evitar duplicar la lógica innecesariamente.

Comments are closed.