none
usando la capa de datos como capa de transporte con una dll que genera la capa de datos(subsonic) RRS feed

  • Pregunta

  • tengo la siguiente estructura de solucion:
    solucion x

    -proyect dada:proyecto y capa de datos
    -proyect bus: proyecto y capa de negocio
    -proyect InterfazWin: proyecto y capa de interfaz windows


    mi capa de datos esta realizada con subsonic, una dll que genera
    las clases para el acceso a  datos de las entidades de mi base de datos
    (genera una clase por cada entidad de mi base)


    por teoria, se que datos no ve otra capa, negocio tiene referenciado datos
    y que negocio e interfaz deben tener referenciado la capa de transporte

    en mi caso no utilizo un proyecto mas que sea capa de transporte, sino que uso
    el proyecto dada, adema de capa de datos como capa de transporte para pasar los datos
    de negocio a data y este ultimo actualiza en la base de datos


    pero esto me lleva aparejado tener que referenciar la dll data o sea la capa de datos
    en la interfaz y por teoria esto no deberia hacerse


    pido una ayuda sobre la distribucion:

    1- puedo dejarlo asi, ya qeu de la practica a la teoria a veces hay un gran salto
    2- crear un proyecto de transporte qeu referencia a la dll data y usar este en interfaz en vez de usar la referencia al proyecto data


    todo lo que no sean entidades directas en negocio he creado una carpeta listasGenericas para pasar datos de interfaz a negocio, pero al final y a cabo de negocio a datos siempre ira una entidad de subsonic por ello es que lo uso asi


    ejemplo:

    si tengo una tabla en mi base llamada clientes con lso campos idcliente, codigo, nombre, saldo
    yo podria crear una lista en negocio que herede de esta y agregarle el campo comentario y resulta
    que comentario lo guardoen otra tabla por ejemplo comentarioscliente(idcomentario, idcliente, comentario)
    entonces en negocio divido los datos de la lista para grabar en ambas tablas los datos del cliente en la tabla clientes
    y su comentario en la tabla comentarioscliente pero desde la interfaz reciboen negocio todos los datos en una lista
    perzonalizada
     
    o sea que para pasar datos de mi interfaz a negocio puedo pasarlo en listas que de definen en la capa de datos
    y extender las listas en negocio y hacerlas heredar de datos para aprovechar ciertas propiedades

    cual es su opcion, usarian la capa de datos importandola en interfaz o crearian un nuevo proyecto llamado transporte
    que en definitiva usa la dll de datos?

    saludos


    programador
    lunes, 28 de febrero de 2011 18:20

Respuestas

  • hola

    una consulta, las entidades que genera la capa de datos, son entidades in logica ? o sea solo son propiedades que definen a la entidad

    si es asi podrias aplciar lo que explicas sin problemas, o sea usar la entidade de datos como parte de entidades mas complejas para el transporte

    pero ojo si la entidad de datos tiene funcionalidad, no recomendaria que la expongas a un medio de transporte

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 18:29
  • cada etidad tiene metodos que pueden ejecutarse pero quedamos en no ejecutarlos como norma directamente desde la interfaz

    mm aunque se pacte no usarlas estan presentes y eso no es bueno

    por ahi podrias definir qe estas sean als entidades de dominio y dejarlas simpre en el servidor, no usarlas como transporte a la interfaz

    y en la capa de negocio, o si quieres alguna intermedia mapear y desmapear estas entidades con otras que si sean de transporte, mas que nada lo apunto a que si el dia de mañana quieres serialziar esta clase puedas tener problemas, esto es muy comun cuando trabajas con servicio

    es por eso que pregunte si las entiades solo tenas propiedades o tambien implementaban logica, si tienes funcionalidad, no als uses como medio de transporte, ni solas, ni con entidades mas complejas que las encapsules

    si quieres automatizar el mapeo por ahi puedas usar algo como ser

     

    AutoMapper: the Object-Object Mapper

    AutoMapper and IoC

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 19:23
  • ahora no implemento una capa de servicio web pero seria para eso no

    exacto

    deberia serializar los datos y alli tendria problemas?

    a eso apunto con el comentario

     

    es mas si analzias un poco el modelo de Entity Framework vera que este lo tiene en cuanta al implementar los objetos POCO

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 21:10

Todas las respuestas

  • hola

    una consulta, las entidades que genera la capa de datos, son entidades in logica ? o sea solo son propiedades que definen a la entidad

    si es asi podrias aplciar lo que explicas sin problemas, o sea usar la entidade de datos como parte de entidades mas complejas para el transporte

    pero ojo si la entidad de datos tiene funcionalidad, no recomendaria que la expongas a un medio de transporte

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 18:29
  • en realidad subsonic crea un archivo fisico y mete todas
    las definiciones de clases(entidades) en el mismo archivo

    cada etidad expone metodos para actualizar datos(agregar, modificar, eliminar)

    cada etidad tiene metodos que pueden ejecutarse pero quedamos en no ejecutarlos
    como norma directamente desde la interfaz, sino que en negocio armamos las funciones, por
    ejemplo para eliminar un pais en negocio tengo al funcion  _mPaisesDelete que ella si usa el metodo Paise.Delete, metodo expuesto por la clase entidad para paises

     /// <summary>
            /// Elimina un pais por el campo id
            /// </summary>
            /// <param name="pPais"></param>
            public void _mPaisesDelete(Paise pPais)
            {
                  Paise.Delete(x => x.ID_Paises == pPais.ID_Paises);
            

            }


    si quiero eliminar un pais en la interfaz no uso directamente Paise.Delete(x => x.ID_Paises == pPais.ID_Paises); sino que llamo a negocio, pero si tendria expuesto y con la desventaja
    de que algun programador intente usarlo, eso si lo tengo presente como desventaja

    y suponiendo que por norma en interfaz solo usemos data como transporte,
    o sea sin ejecutar metodos por norma, esta bien que referencie directamente el proyecto data
    a interfaz o es mejor crear un proyecto Transporte que tenga referenciada Data
    y usar este trasnporte en la interfaz?

    gracias por tus consejos leandro, parezco pregunton jaja, quizas lo sea pero
    me gusta preguntarle a los que saben porque de ellos se aprende, y he aprendido mucho por
    aca gracias a toda la gente que brinda sus conocimeintos y experencias dia a dia

    saludos

     


    programador
    lunes, 28 de febrero de 2011 19:10
  • cada etidad tiene metodos que pueden ejecutarse pero quedamos en no ejecutarlos como norma directamente desde la interfaz

    mm aunque se pacte no usarlas estan presentes y eso no es bueno

    por ahi podrias definir qe estas sean als entidades de dominio y dejarlas simpre en el servidor, no usarlas como transporte a la interfaz

    y en la capa de negocio, o si quieres alguna intermedia mapear y desmapear estas entidades con otras que si sean de transporte, mas que nada lo apunto a que si el dia de mañana quieres serialziar esta clase puedas tener problemas, esto es muy comun cuando trabajas con servicio

    es por eso que pregunte si las entiades solo tenas propiedades o tambien implementaban logica, si tienes funcionalidad, no als uses como medio de transporte, ni solas, ni con entidades mas complejas que las encapsules

    si quieres automatizar el mapeo por ahi puedas usar algo como ser

     

    AutoMapper: the Object-Object Mapper

    AutoMapper and IoC

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 19:23
  • hola leandro gracias por tu ayuda, una pregunta mas,  cuando dices :

    serializar esta clase puedas tener problemas

     a que tipos de problemas te refieres, por ejemplo a que si quiero serializar una clase de transporte que solo tenga propiedades que sean de datos y serializar a xml seria mas facil porque sino no sabrai qeu serializar si hay metodos en ella??

    ahora no implemento una capa de servicio web pero seria para eso no, en caso de querer consumir un metodo de negocio via web service, deberia serializar los datos y alli tendria problemas?

    saludos

     


    programador
    lunes, 28 de febrero de 2011 20:47
  • ahora no implemento una capa de servicio web pero seria para eso no

    exacto

    deberia serializar los datos y alli tendria problemas?

    a eso apunto con el comentario

     

    es mas si analzias un poco el modelo de Entity Framework vera que este lo tiene en cuanta al implementar los objetos POCO

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta rodrigo barboni lunes, 28 de febrero de 2011 21:34
    lunes, 28 de febrero de 2011 21:10
  • ALGO DE LA TRADUCCION:

    POCO: Al igual que en el contexto de Java, el término se utiliza para contrastar un simple objeto con el que está diseñado para ser utilizado con un marco complicado, objeto especial, como un componente ORM. Otra forma de decirlo es que POCOS son los objetos no comprometido con la herencia o de los atributos necesarios para marcos específicos

     

    agredezco Leandro tu ayuda en este tema que me tenia dando vueltas en la cabeza, vere que hago en el proyecto, pero ya tengo claro el porque de tener una capa de transporte simple, solamente con los campos de datos a transportar, aunque no entendi mucho el link  y la traduccion jaja

    saludos y gracias


    programador
    lunes, 28 de febrero de 2011 21:33
  • Hola Rodrigo, pegale un vistazo a http://code.google.com/p/magicapps/ , es un generador diferente a subsonic, te genera la dal pero también la interfaz, ta vez te de alguna idea
    martes, 8 de marzo de 2011 10:01