none
Capa de Entidades RRS feed

  • Pregunta

  • Estoy creaendo una aplicacion con capas y en la capa de entidades he creado clases como Cliente , Vehiculo , Chofer , etc.  Luego me ehe dado cuenta que algunas veces he de necesitar una coleccion de objetos Cliente, en otras del objeto Vehiculo, etc. Bueno, entonces implemente una clase ClienteCollection que herede de un generico de List. Me gustaria saber si esto es correcto, es decir si esta es la  manera correcta de implementar tal codigo.
                               

    Code Snippet
                                public class Cliente{
                               
                                }
                               
                                public class ClienteCollection : List<Cliente>{
                                }

     

     

    Gracias
    lunes, 4 de febrero de 2008 21:43

Todas las respuestas

  • A mi modo de ver es un planteamiento totalmente correcto. En todo caso, si estás interesado en estos temas, no te puedes perder el evento de SecondNug sobre CSLA, mañana de 19:00 a 21:00h (GMT+1)

     

    Salud y suerte!

    lunes, 4 de febrero de 2008 22:11
  • Gracias por la respuesta... bueno me has aclarado mas la idea de capa de negocio que tenia, por un momento pense que no era correcto.

    Pero una pregunta, como mi aplicacion está entres capas es mas optimo pasar un objeto de tipo ClienteCollection que un datatable.???

     

    Gracias.

     

    lunes, 4 de febrero de 2008 22:26
  • No se trata de ser más o menos óptimos, se trata de que un DataTable representa solo información, mientras qu eun objeto de negocio debe añadir la lógica que un DataTable omite, con lo que no podemos hablar de que sean lo mismo.

     

    Si tu objeto de negocio no hace más que almacenar información es muy probable que sea menos óptimo que un DataTable, pero como ya te he comentado, un objeto de negocio ha de ser mucho más.

     

    Salud y suerte!

    lunes, 4 de febrero de 2008 22:47
  • Hola Sigfrido,

     

    El código que has puesto es correcto, y además permite abstraerse de la fuente de datos (que para eso están las capas) pero me gustaría comentarte algunas cosas.

     

    Como bien dices, realizar la conversión de filas de datatable a objetos de tipo cliente requiere un procesamiento, y puedes encontrarte problemas de rendimiento.

     

    Si detectas que esto ocurre, una solución sería encapsular los datatables en tus objetos. De este modo, mantienes la abstracción (no tienes porque saber cómo están implementados por dentro) y podrías mejorar el rendimiento. De este modo sólo procesas los DataRow bajo demanda.

     

    Por ejemplo, podrías tener

     

    Code Snippet

    public class Cliente

    {

    private DataRow dr;

    public String Nombre { get { return dr["nombre"].ToString(); } }

    public Cliente(DataRow dr) { ... }

    ...

    }

    public class ClienteCollection : IEnumerable<Cliente>

    {

    private DataTable dt;

    public Cliente this[int index]

    {

    get { return new Cliente(dt.Rows[index]); }

    }

    ...

    }

     

    martes, 5 de febrero de 2008 13:59
  • Yo lo que hago particularme es generar un DAO para cada entidad

        public class DemoEntidadDAO
        {

            public void FillDataset( DataSet data, string orderBy, int recordFrom, int recordTo,            
            ...

            public SqlCommand GetDemoEntidadInsertCommand()
            ...

            public SqlCommand GetDemoEntidadUpdateCommand()
            ...

            public SqlCommand GetDemoEntidadDeleteCommand()
            ...       
        }

    Posteriormente, relaciono lo que consigo en el DAO con mi entidad
       public class DemoEntidad
        {

            internal DemoEntidad( DataRow data ) : base( data )
            {
            }

            public string Id
            {
                get { return (string)GetFieldOrDefault( "ID" ); }
                set { SetField( "ID", value ); }
            }

            ....
        }

    y despues una del estilo Builder, que me genera las colecciones por ejemplo , o me genera un DataRow new en una collecion de entidades, sin tener q impactar en la DB...

    En el Builder.. solo llamo al DAO y hago un FillDataSet, y recorro todo atravez de un foreach... y genero una Collecion del tipo "DemoEntidad"

    Al tenerlo asi organizado, facilita la implemetacion de codigo generado. Se puede mapear tranquilamente en un xml.. y tener codigo generado, y con un DAO estandar para todas las aplicaciones, encaso de optar por algo puntual, se puede extender...

    Saludos.
    viernes, 8 de febrero de 2008 3:05
  • Que tal oye y tengo una duda similar
    ya tengo la entidad, pero me falta hacer el mapeo , ya que me envian la infromacion en archivos de texto y los paso a un DataTable, como puedo mapear para crear una lista generica de entidades, sin usar claro el :

    objENtidad.miembro1=dr["miembro1"].text;
    oxtibu-Mexico
    miércoles, 15 de julio de 2009 17:09