Se l'obiettivo è essere in grado di scambiare provider di back-end DB (EF, OleDB, ODBC, ecc.) allora mi chiedo dove cambia il DB CRUD differente? Attualmente ho un'interfaccia (IGenericContext) che ha funzioni Aggiungi / Aggiorna / Elimina / Seleziona. Quindi faccio un ADOContext che implementa questo e all'interno di queste funzioni è dove faccio le istruzioni SQL. Per Aggiungi / Aggiorna / Elimina va bene, ma selezionare è interessante in quanto prendo solo una stringa che è la sql. Quindi nel mio repository, dove ho funzioni come GetAllTasks (), chiamo solo quel contesto.Seleziona la funzione con l'istruzione sql.
Tuttavia, se poi creo un EFContext non potreste chiamare questa funzione Select con la stringa sql. Faresti qualcosa che ha coinvolto Linq, il che significa che il mio repository ha bisogno del cambio di codice se cambio il contesto. Ora è meglio che il livello aziendale necessiti di un cambiamento, ma sembra ancora che sarebbe bello non dover cambiare il repository dato che è davvero il contesto che dovrebbe gestire quelle cose e che devono essere cambiate e per Update / Aggiungi / Elimina sì, ma la selezione sembra più unica per tipo di contesto.
Come gestiresti qualcosa del genere? Immagina di aver creato un contesto di file di testo per quella materia. Sembra che sia abbastanza facile nascondere i dettagli di Aggiungi / Aggiorna / Elimina ma è più difficile nascondere i dettagli di selezione dal contesto all'interno del repository.