none
Pasar datos entre capas

    Question

  • Hola:

    Tengo una duda relacionada con un post anterior que trata sobre como pasar datos entre dos capas, concretamente las capas UI y BLL. Me explico:

    En la capa BLL tengo una funcion que se conecta a dos bases de datos y obtiene dos listas de articulos, una de cada base de datos. Despues las compara para buscar las diferencias, guardando en otras dos listas los registros de las dos bases que no coinciden con los de la otra base y además guarda en un Dictionary la correspondencia entre ambos registros (el registro 2 se corresponde con el 3 de la otra base de datos) y asi.

    Las dos listas y el dictionary quiero "mandarlos" a la capa UI para mostrar esos datos.Si fuese solo una lista podría ponerla como valor devuelto del método pero al ser dos listas y un dictionary... Como podría hacerlo, o como que suele hacer?

    Tuesday, January 25, 2011 12:08 PM

Answers

  • Puedes devolver un objeto que contenga las tres cosas y listo. Si no quieres programar una clase para eso, puedes usar la clase Tuple (.NET 4.0):

    http://msdn.microsoft.com/en-us/library/dd387150.aspx

    Un saludo


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    Tuesday, January 25, 2011 12:10 PM
  • hola

    cuando suce esto se crean objetos complejos que usarias para interncambiar informacion

    o sea podrias crear una tercer clase que contenga las dos listas, entonces ese metodo de la BLL devolveria esta clase

    public class ComparativasResult{

       public List<string> List1 {get; set;}

       public List<string> List2 {get; set;}

       public Dictionary<int, string> Dic1 {get; set;}

    }

     

    entonces en tu capa de usas

    public class ProcesoBLL{

       public ComparativasResult Procesar(){

            ComparativasResult result = new ComparativasResul();

            //aqui procesas

           return resul;

       }

    }

     

    en la prentacion tomas la lista y el diccionario que se devuelven dentro de esa clase

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, January 25, 2011 12:16 PM

All replies

  • Puedes devolver un objeto que contenga las tres cosas y listo. Si no quieres programar una clase para eso, puedes usar la clase Tuple (.NET 4.0):

    http://msdn.microsoft.com/en-us/library/dd387150.aspx

    Un saludo


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    Tuesday, January 25, 2011 12:10 PM
  • Pues no conocía la clase Tuple. Ya había pensado en programar una clase pero esto me simplifica mucho las cosas. Gracias.
    Tuesday, January 25, 2011 12:13 PM
  • hola

    cuando suce esto se crean objetos complejos que usarias para interncambiar informacion

    o sea podrias crear una tercer clase que contenga las dos listas, entonces ese metodo de la BLL devolveria esta clase

    public class ComparativasResult{

       public List<string> List1 {get; set;}

       public List<string> List2 {get; set;}

       public Dictionary<int, string> Dic1 {get; set;}

    }

     

    entonces en tu capa de usas

    public class ProcesoBLL{

       public ComparativasResult Procesar(){

            ComparativasResult result = new ComparativasResul();

            //aqui procesas

           return resul;

       }

    }

     

    en la prentacion tomas la lista y el diccionario que se devuelven dentro de esa clase

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, January 25, 2011 12:16 PM
  • Hola:

    Aunque podía haberlo resuelto con la clase Tupla, como las entidades con las que trabajo implementan una Interfaz, he podido resolverlo de forma genérica, con lo que no tengo que hacer tantas clases como tablas tengo, añadiendo además un par de cosas para hacer mas sencillo el trabajo:

    public class CompEntidad<T> where T:IEntidad
      {
        public CompEntidad()
        { 
          listaAccess= new List<T>();
          listaSQL=new List<T>();
          dicRelacion = new Dictionary<int?, int?>();
        }
        public CompEntidad(T entidadAccess,T entidadSQL):base()
        {
          Añadir(entidadAccess,entidadSQL);
        }
      
      
        public List<T> listaAccess { get; set; }
        public List<T> listaSQL { get; set; }
        public Dictionary<int?,int?> dicRelacion {get;set;}
        public void Añadir(T entidadAccess, T entidadSQL)
        {
          if (entidadAccess.GetType() != entidadSQL.GetType())
            throw new Exception("Entidades de diferente tipo");
          listaAccess.Add(entidadAccess);
          listaSQL.Add(entidadSQL);
          dicRelacion.Add(entidadAccess.Id, entidadSQL.Id);
        }
      }
    

    Tuesday, January 25, 2011 8:41 PM