Apuesto. IoC, Pruebas y Agatha

agatha-rrsl dapper inversion-of-control testing

Pregunta

En un proyecto MVC 3 estoy usando EF4, IoC y Agatha-RRSL como mi capa de servicio.

¡Afortunadamente, esta semana encontré a Dapper y me estoy moviendo de EF4 a Dapper!

Por lo general, inyecto un repositorio genérico en mis manejadores de solicitudes de Agatha ...

Pero, ¿cómo debo usar Dapper?

1) ¿Debería inyectar un IDbConnection en el Agatha Handler? Entonces, dentro del controlador lo uso con Dapper Query o Dapper Execute? ¿Es esto comprobable? ¿Y qué hay de la burla?

2) ¿Debo crear un repositorio genérico para Dapper? Tal vez el repositorio sería algo así como:

public class Repository {

  private IDbConnection _connection;

  public Repository(IDbConnection connection) {
    _connection = connection;
  } // Repository

  public Int32 Execute(String sql, dynamic param = null) {
    return _connection.Execute(sql, param); 
  } // Execute

  // Query code   
}

Y el IDbConnection se inyectaría aquí.

Y el repositorio se inyectaría dentro de los controladores.

No estoy seguro de cómo probar esto ...

3) ¿Debería colocar todo mi código dentro del controlador?

using (SqlConnection connection = new SqlConnection(connectionString)) {
 connection.Execute(@"insert Roles(Name) values (@name)", new { name = "Role" }); 
}

Pero, ¿y las pruebas?

4) Me he dado cuenta de que Dapper usa métodos estáticos. ¿Esto no genera algunos problemas de memoria?

Perdón por tantas preguntas ... Estoy tratando de hacer esto bien.

Gracias, Miguel

Respuesta popular

Última respuesta, pero quiero señalar que la implementación de su repositorio es realmente un "objeto de acceso a datos". Los repositorios tratan con agregados completos, es decir. un grupo de cosas que pertenecen juntas. Lo ideal es que su interfaz solo acepte y devuelva objetos del tipo de raíz agregado (por ejemplo, un Repository<User> puede tener los métodos void Update(User user) {} o IEnumerable<User> Find(...) {} ).

El uso o la existencia de cualquier mecanismo de persistencia es un detalle de implementación y, por lo general, no pertenecería a una interfaz de repositorio ni hablaría SQL.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow