none
Como desarrollar clases para el acceso a datos ? RRS feed

  • Pregunta

  • Hola, tengo una pregunta relacionada a Entity Framework y la estructura de un proyecto.

    Tengo una confusión con las clases que deben implementar los métodos de acceso al dato, ej: Create, GetAll, etc... y las clases que representan las tablas.

    Tengo mi biblioteca llamada "Data" que es  donde agrego el componente ADO.net, eso me genera las tablas de mi base de datos en clases c# para poder mapear a sql, es correcto eso ?

    Para cada entidad debería crear una clase (Dto)  que pueda ser referenciada a otras capas ? (así una capa vista no conoce una entidad de datos, pero si una entidad de c# (dto) que se convierte en una entidad de datos... ?)

    Donde deberían ir los dto, en una biblioteca aparte o en la misma biblioteca donde agrego la base de datos ?

    Los métodos crud como Insert, GetAll, etc... deberían ir en el mismo dto junto con sus propiedades o esos métodos de deberían implementar en otras clases ?

    Hasta el momento tengo lo siguiente y quería saber si estoy en lo correcto:

    Biblioteca.Data:

      - modelo de bd que genera ado.net

    Biblioteca.Models

           clase Producto: Aqui referencio la dll de Biblioteca.Data

    public class ProductoEntity { public string Descripcion { get; set; } public int Precio { get; set; }

    //esto es para transformar una entidad de c# a sql public Producto toSql() { var sqlEntity = new Producto(); //clase que genera ef sqlEntity.Descripcion = this.Descripcion; sqlEntity.Precio = this.Precio; return sqlEntity; }

    Biblioteca.DAL: Aquí implemento las operaciones, Referencio Biblioteca.Models y Biblioteca.Data

    //esta bien que sea booleano ? public bool Create(ProductoEntity model) { bool success = false; using (var context = new TiendaEntities()) { var sqlEntity = model.toSql();

                   var result = context.Producto.Add(sqlEntity);
                   context.SaveChanges();
     
                   success = true;

    } return success; }

    Es correcto que el metodo create reciba un objeto de tipo dto y ese dentro de convierta a entidad sql, o debería venir ya como clase sql ?

    Luego en negocio hago validaciones y demas...

    La verdad estoy un poco confundido y no se cuál sea la mejor manera para que quede ordenado, comenzaré un proyecto en un tiempo más y quiero saber si voy por el camino correcto. gracias de antemano


    sábado, 5 de agosto de 2017 3:47

Respuestas

  • hola

    lo que no me queda claro es cual es la diferencia entre ProductoEntity y Producto ? pareciera que uno seria una entidad que viene de la presentacion y la otra la entidad persistente

    para la conversion recomendaria evalues usar automapper, sera mas simple que mapear a mano las entidades

    >>Es correcto que el metodo create reciba un objeto de tipo dto y ese dentro de convierta a entidad sql, o debería venir ya como clase sql ?

    en principio no esta mal, pero quizas cambiaria los nombres de las clases, decirle entity a producto no refleja de donde viene, por lo general si viene de la presentacion lo llamarias ProductModel o ProductDto

    [Entity Framework][Code First] Crear entidad simple

    evalua ademas cambiar el concepto de DAL por el de Repository, basicamente es lo mismo, pero la idea final es poder crear una implementacion con interfaces para poder cambiarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de agosto de 2017 17:08

Todas las respuestas

  • Hola

    Puedes trabajar con una arquitectura de tres capas en la cual tienes Presentación, Lógica, AccesoDatos, Entidades, cada capa tiene una responsabilidad.

    • Presentación, esta capa se encarga de interactuar con el usuario final.
    • Lógica, esta capa se encarga de llamada a métodos y de la lógica de negocio. 
    • AccesoDatos, esta capa se encarga de persistir contra la base de datos. 
    • Entidades, esta capa es una capa transversal que se encarga del mapeo de las estructuras de las tablas. en otras palabras son las entidades de negocio que representan el mundo real.

    Nota: Ninguna capa puede estar contaminada con responsabilidades de otras capas.

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    sábado, 5 de agosto de 2017 4:21
  • hola

    lo que no me queda claro es cual es la diferencia entre ProductoEntity y Producto ? pareciera que uno seria una entidad que viene de la presentacion y la otra la entidad persistente

    para la conversion recomendaria evalues usar automapper, sera mas simple que mapear a mano las entidades

    >>Es correcto que el metodo create reciba un objeto de tipo dto y ese dentro de convierta a entidad sql, o debería venir ya como clase sql ?

    en principio no esta mal, pero quizas cambiaria los nombres de las clases, decirle entity a producto no refleja de donde viene, por lo general si viene de la presentacion lo llamarias ProductModel o ProductDto

    [Entity Framework][Code First] Crear entidad simple

    evalua ademas cambiar el concepto de DAL por el de Repository, basicamente es lo mismo, pero la idea final es poder crear una implementacion con interfaces para poder cambiarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 7 de agosto de 2017 17:08