es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo acceder a las funcionalidades de EF en la arquitectura limpia y .NET Core.

El EF Core incluye funcionalidades que es posible que desee utilizar para consultas complejas. Por ejemplo, AsNoTracking(), SumAsync, MaxAsync o la búsqueda de entidades cambiadas/modificadas, etc., están disponibles en la biblioteca Microsoft.EntityFrameworkCore.

En la arquitectura limpia, la capa ApplicationCore no permite el acceso directo al DBContext, y los datos solo se pueden acceder a través de una interfaz de repositorio común y especificaciones.

Entiendo la idea de la separación de responsabilidades y de abstraer la capa persistente de la capa de dominio. Y en el futuro, si cambias la base de datos, solo necesitarás cambiar la capa persistente. Sin embargo, en la realidad, ¿con qué frecuencia cambias la base de datos en una aplicación a nivel empresarial? Una vez que está en producción, se vuelve más difícil reemplazarla simplemente.

public class ToDoItemSearchService : IToDoItemSearchService
{
  private readonly IRepository<Proyecto> _repositorio;

  public ToDoItemSearchService(IRepository<Proyecto> repositorio)
  {
    _repositorio = repositorio;
  }

  public async Task<Resultado<List<ElementoPorHacer>>> ObtenerTodosLosElementosIncompletosAsync(int idProyecto, string cadenaBusqueda)
  {
     var proyecto = await _repositorio.ObtenerPorEspecificacionAsync(especificacionProyecto);   
    // cómo cargar entidades sin rastreo
  }
}

¿Cómo acceder a las funcionalidades de EF? ¿Debería el repositorio exponerlas? Por ejemplo:

public interface IRepository<TEntidad>
{
      List<TEntidad> ObtenerPorEspecificacionAsync(...);
      List<TEntidad> ObtenerPorEspecificacionAsyncSinRastreo(...)

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En la arquitectura limpia, la capa ApplicationCore no debería acceder directamente a DBContext, sino a través de una interfaz de repositorio y especificaciones. Si bien EF Core tiene funcionalidades como AsNoTracking(), SumAsync, MaxAsync y la posibilidad de encontrar entidades cambienas/modificadas disponibles en el conjunto de ensamblados de Microsoft.EntityFrameworkCore, no se recomienda exponer estas funcionalidades en la interfaz del repositorio. En su lugar, el repositorio debería tener un método separado como GetBySpecAsyncWithNoTracking para cargar entidades sin seguimiento. Mantener la interfaz del repositorio simple y centrada en su responsabilidad principal promoverá la separación de preocupaciones y la mantenibilidad. Si bien puede resultar desafiante reemplazar una base de datos que ya está en producción, abstraer la capa de persistencia de la capa de dominio proporcionará flexibilidad y ayudará a evitar el bloqueo del proveedor.

Comments are closed.