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#: Dos clases diferentes de dos XSD diferentes.

Estoy luchando con la configuración de una función que devuelve una clase. La advertencia es que el XSD utilizado para crear las clases de respuesta difiere entre los entornos de prueba y de producción. La clase que deserializo desde XML depende del entorno al que estoy accediendo. ¿Cuál es lo correcto que debo hacer aquí para poder admitir ambos entornos (que se ampliarán a tres en el futuro)?

public async Task<*thingie*> ReadDataAsync(List de números de serie, env)
{
  if(env == Test)
  {
    url = https://test.mycompany.com/db/getData
    xml = <response>
    var respA = xml.DeserializeXml<Xsd125.dataResponse>(); //XSD v1.25
  }
  elseif(env == Prod)
  {
    url = https://prod.mycompany.com/db/getData
    xml = <response>
    var respB = xml.DeserializeXml<Xsd129.dataResponse>(); //XSD v1.29
  }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución a este problema es crear una interfaz o clase base para las clases de respuesta que se utilizarán en todos los entornos. Esta interfaz o clase base debe contener todas las propiedades y métodos comunes a todas las versiones del XSD.

    Luego, crea clases separadas para cada versión del XSD que implementen la interfaz o hereden de la clase base. Estas clases deben contener las propiedades y métodos adicionales específicos de sus respectivas versiones del XSD.

    En tu función ReadDataAsync, puedes usar una declaración switch en lugar de una declaración if-else para determinar qué versión del XSD utilizar según el parámetro de entorno. Por ejemplo:

    public async Task<ithingie> ReadDataAsync(List<string> serialNumbers, string env)
    {
        string url;
        string xml;
        switch (env)
        {
            case "Prueba":
                url = "https://test.mycompany.com/db/getData";
                xml = "<response>...</response>";
                var respA = xml.DeserializeXml<xsd125.dataresponse>();
                return new ResponseTypeA(respA);
            case "Prod":
                url = "https://prod.mycompany.com/db/getData";
                xml = "<response>...</response>";
                var respB = xml.DeserializeXml<xsd129.dataresponse>();
                return new ResponseTypeB(respB);
            // Agrega más casos para entornos adicionales en el futuro
            default:
                throw new ArgumentException("Entorno especificado no válido.");
        }
    }
    

    En este ejemplo, ResponseTypeA y ResponseTypeB son clases que implementan la interfaz IThingie y contienen las propiedades y métodos adicionales específicos de sus respectivas versiones del XSD. El constructor de cada clase acepta una instancia de la clase de respuesta del XSD y mapea sus propiedades a las propiedades de la interfaz o clase base.</xsd129.dataresponse></xsd125.dataresponse>

Comments are closed.