none
Capa de Datos en la Api Rest? RRS feed

  • Pregunta

  • Hola desarrolladores, estoy desarrollando una API Rest y en los controllers tengo todas las consultas, pero me nació una duda, si lo estoy haciendo bien?? Eso si es una Buena Practica?? Debería Crear una carpeta Llamada DataAccess y crear todas las consultas hay y llamarlas desde el controller???
    lunes, 18 de julio de 2016 20:05

Respuestas

  • hola

    >>mi duda es si asi esta bien o deberia crear las clases con las consultas en una carpeta aparte DataAccess?

    Es que el repository representa la capa de datos, solo que aplica un patron que plantea inyectar la instancia por medio de IoC

    a donde apunto es que si deberias crear una capa de acceso a datos, pero no los crees como clases que instancias en el controller, sino que lo inyectas mediante un container como ser Unity, Ninject, StructuraMap, autofac, etc, el que mas te guste implementar, como se explica aqui

    Dependency Injection in ASP.NET Web API 2

    >>no se como consumir desde la api ese metodo para validar que el empleado no exista y no tener que reescribir el codigo de consulta para el metodo registro empleado

    se supone que desde un metodo de web api no debes invocar a otro, para eso tienes la capa de servicio y persistencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta CrissR lunes, 18 de julio de 2016 21:05
    lunes, 18 de julio de 2016 20:51

Todas las respuestas

  • hola

    >>estoy desarrollando una API Rest y en los controllers tengo todas las consultas, pero me nació una duda, si lo estoy haciendo bien?

    depende como lo implementes, lo correcto seria tener al menos una capa de persistencia que implemente Repository

    patterns & practices: Repository Factory

    Implementing the Repository Pattern in C# ASP .NET

    la idea es poder injectar usando una libreria de IoC (como ser Unity, Ninject, autofac) la instancia del repository para asi poder realizar pruebas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 18 de julio de 2016 20:17
  • Hola Leandro, Ahora si me perdi con lo de repository, actualmente lo estoy haciendo con Ado .Net y uso mapper. Las consultas las estoy haciendo en el Controller, mi duda es si asi esta bien o deberia crear las clases con las consultas en una carpeta aparte DataAccess?

    Esta duda me nace ya que tengo un metodo

    public IHttpActionResult ConsultarOrganismos(Empleado empleado)
    {
    .............
    }
    Ahora estoy haciendo el metodo Registro Empleado pero debo consultar antes que el empleado no este previamente Registrado pero como consultar es IHttpActionResult (no se como consumir desde la api ese metodo para validar que el empleado no exista y no tener que reescribir el codigo de consulta para el metodo registro empleado)

    • Editado CrissR lunes, 18 de julio de 2016 20:34
    lunes, 18 de julio de 2016 20:29
  • hola

    >>mi duda es si asi esta bien o deberia crear las clases con las consultas en una carpeta aparte DataAccess?

    Es que el repository representa la capa de datos, solo que aplica un patron que plantea inyectar la instancia por medio de IoC

    a donde apunto es que si deberias crear una capa de acceso a datos, pero no los crees como clases que instancias en el controller, sino que lo inyectas mediante un container como ser Unity, Ninject, StructuraMap, autofac, etc, el que mas te guste implementar, como se explica aqui

    Dependency Injection in ASP.NET Web API 2

    >>no se como consumir desde la api ese metodo para validar que el empleado no exista y no tener que reescribir el codigo de consulta para el metodo registro empleado

    se supone que desde un metodo de web api no debes invocar a otro, para eso tienes la capa de servicio y persistencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta CrissR lunes, 18 de julio de 2016 21:05
    lunes, 18 de julio de 2016 20:51
  • Hola,

    Puedes usar una capa acceso a datos, para que no estés mezclando tu lógica con el acceso a los datos(repositorio).

    Dependiendo de la complejidad del proyecto es que debes dividir en n capas.

    Un ejemplo seria que tu proyecto este divido de esta forma:

    1. Capa datos: Aquí deberás tener todos los métodos que se encarguen de acceder y actualizar los datos de la bd.

    2. capa negocio: Aquí estará la lógica de tu negocio y de tu aplicación.

    3. capa de presentación: Aquí deberás tener el proyecto web, en tu caso la web tendrá el patrón MVC.

    4. capa común: Aquí podrías tener las partes comunes de tu aplicación como entidades, funciones genéricas, recursos, etc.

    Ahora como te comentan puedes usar injección de dependencias (IoC) como Ninject, Unit, etc. También puedes usar ORM para el manejo de tus datos como Entity Framework, NHibernate o microORM como Daper. Tienes bastantes librerías a tu disposición, ahora puedes ir informándote poco a poco hasta que puedas implementar todo lo mencionado correctamente.

    Solo ten en cuenta que debes separar tu lógica de la presentación y del acceso a los datos.

    Espero te sea de ayuda.

    Saludos

    lunes, 18 de julio de 2016 21:03
  • Muchas Gracias leandro.
    • Editado CrissR lunes, 18 de julio de 2016 21:11
    lunes, 18 de julio de 2016 21:05