Dapper. IoC, Testing e Agatha

agatha-rrsl dapper inversion-of-control testing

Domanda

In un progetto MVC 3 utilizzo EF4, IoC e Agatha-RRSL come livello di servizio.

Fortunatamente, questa settimana ho trovato Dapper e mi sto trasferendo da EF4 a Dapper!

Di solito inietto un repository generico nei miei gestori di richieste Agatha ...

Ma come dovrei usare Dapper?

1) Devo iniettare un IDbConnection nel gestore di Agatha? Quindi all'interno del gestore lo uso con Dapper Query o Dapper Execute? È verificabile? E che dire del derisione?

2) Devo creare un repository generico per Dapper? Forse il repository sarebbe qualcosa di simile:

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   
}

E l'IDbConnection verrebbe iniettato qui.

E il deposito verrebbe iniettato all'interno dei gestori.

Non sei sicuro di come testarlo ...

3) Devo solo inserire tutto il mio codice all'interno del gestore?

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

Ma per quanto riguarda i test?

4) Mi sono reso conto che Dapper usa metodi statici. Questo non risolve alcuni problemi di memoria?

Ci scusiamo per così tante domande ... Sto cercando di farlo bene.

Grazie, Miguel

Risposta popolare

Risposta tardiva, ma voglio sottolineare che l'implementazione del repository è in realtà un "oggetto di accesso ai dati". I repository si occupano di interi aggregati, es. un gruppo di cose che appartengono insieme. L'interfaccia dovrebbe idealmente accettare e restituire solo gli oggetti del tipo di radice aggregata (ad esempio, un Repository<User> può avere metodi void Update(User user) {} o IEnumerable<User> Find(...) {} ).

L'utilizzo o l'esistenza di qualsiasi meccanismo di persistenza è un dettaglio di implementazione e in genere non appartiene all'interfaccia di un repository, né parla SQL.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché