¿Cómo crear capas abstractas entre varios ORM (entidad marco y Dapper)?

abstraction asp.net-core-2.0 c# dapper entity-framework

Pregunta

Quiero crear una capa abstracta entre el marco de la entidad y Dapper. En el tiempo de ejecución puedo elegir ya sea Entorno Marco o Dapper o ambos también. Sé que puedo usar la interfaz

public IORM{
    Save();
    Delete();
    //other ORM functions
}

public EntityFramework : IORM{
    public Save(){
    SaveChanges();
    }
    public Delete(){
    Remove();
    }
}


public Dapper: IORM{
    public Save(){
    //save code goes here
    }
    public Delete(){
    //delete code goes here
    }

Pero esto es operaciones básicas y no estoy seguro de cómo configurar el método .net core 2.0 CofigureServices() .

¿Son aconsejables las abstracciones entre diferentes ORM? En caso afirmativo, ¿cómo implementar la capa de resumen entre Entity Framework y Dapper en .net core 2.0?

Respuesta popular

Siempre es aconsejable mantener las preocupaciones separadas. Pero es una ilusión que un ORM completo puede ocultarse detrás de una definición de interfaz. El comportamiento de tiempo de ejecución del ORM puede tener algunas consecuencias para toda la aplicación y requerirá mucho trabajo para poder simplemente "intercambiar" el ORM. No hay muchas buenas razones para mantener esa habilidad. ¿Cuál es tu motivación detrás de eso?

Por supuesto, es una buena idea abstraer el trabajo concreto de ORM. Los ejemplos concretos realmente dependen de su arquitectura general, pero para mencionar algunos puntos:

  • Mantenga la persistencia (Atributos, dependencias) fuera del modelo y los controladores.
  • Aplique el patrón de repositorio e inserte los parámetros de la interfaz del repositorio en los servicios de su aplicación. De esta forma, puede ocultar operaciones concretas de consulta / escritura del ORM.
  • Aplique el patrón de la unidad de trabajo y maneje la Unidad de trabajo de forma transparente por solicitud utilizando la infraestructura del marco web. De esta forma, puede ocultar operaciones concretas de manejo de transacciones del ORM.


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué