Quando si lavora con un ORM come Entity Framework, sono caduto in un'abitudine constrongvole. Crea un'interfaccia con i metodi get / add su di essa, metti questo su una classe "Repository" quindi aggiungi un costruttore per ogni classe che accetta l'interfaccia. Utilizza i metodi dell'interfaccia nella classe.
Sembra il modo più semplice per ottenere uno strato di astrazione che poi possa prendere in giro per i test unitari.
Tuttavia, facendo un po 'di lettura sull'argomento, sembra che ci sia molta confusione su quale sia l'approccio migliore. Alcuni esempi includono:
-
Usare il tuo ORM con il pattern di repository (sembra una cattiva idea, dato che la maggior parte degli ORM sono già i propri pattern di repository).
-
Creare un repository riutilizzabile usando i generici e condividerlo attraverso i progetti (sembra un eccesso se non stai lavorando con una grande quantità di progetti diversi).
-
Avere un repository che include una logica di dati più dettagliata. Cioè con metodi come "GetUsersWhereAdminIsTrue" piuttosto che i più generici "GetUsers" (questo sembrerebbe portare a un repository con una lista massiccia di metodi).
-
Utilizzare lo IOC per consentire il test dell'unità del codice senza una fonte esterna senza la necessità di un ulteriore layer wrapper (ho visto questo accennato più volte, ma non lo capisco. Sicuramente anche con IOC si è ancora bisogno di iniettare un'interfaccia?)
La risposta potrebbe essere in parte circostanziata. Ma mi piacerebbe capire perché le persone propongono soluzioni nonostante le carenze che ho messo tra parentesi sopra?