Qualcuno può spiegarmi il modello di repository in .NET, passo dopo passo fornendo un esempio o una demo molto semplice.
So che questa è una domanda molto comune, ma finora non ho trovato una risposta soddisfacente.
Qualcuno può spiegarmi il modello di repository in .NET, passo dopo passo fornendo un esempio o una demo molto semplice.
So che questa è una domanda molto comune, ma finora non ho trovato una risposta soddisfacente.
Risposte:
In sintesi, descriverei l'impatto più ampio del modello di repository. Consente a tutto il codice di utilizzare oggetti senza dover sapere come gli oggetti sono persistenti. Tutta la conoscenza della persistenza, incluso il mapping dalle tabelle agli oggetti, è contenuta in modo sicuro nel repository.
Molto spesso troverai query SQL sparse nella base di codice e quando arrivi ad aggiungere una colonna a una tabella devi cercare i file di codice per provare a trovare gli usi di una tabella. L'impatto del cambiamento è di vasta portata.
Con il modello di repository, è necessario modificare solo un oggetto e un repository. L'impatto è molto piccolo.
Forse sarebbe d'aiuto pensare al motivo per cui dovresti usare il modello di repository. Ecco alcuni motivi:
Hai un unico posto per apportare modifiche al tuo accesso ai dati
Hai un unico posto responsabile di un set di tabelle (di solito)
È facile sostituire un repository con un'implementazione falsa per i test, quindi non è necessario disporre di un database disponibile per i test delle unità
Ci sono anche altri vantaggi, ad esempio, se stavi usando MySQL e volessi passare a SQL Server, ma in pratica non l'ho mai visto!
IConnection
, ICommand
, ecc parte che nasconde il tipo di database. Il repository è generalmente più incentrato sul dominio.
Questo è un bell'esempio: l'esempio del modello di repository in C #
Fondamentalmente, il repository nasconde i dettagli di come i dati vengono recuperati / persistenti da / nel database. Sotto le coperte:
IDbContext
) o direttamente in nhibernate ( ISession
). Un repository correttamente implementato estrae TUTTE le informazioni specifiche sulla persistenza (come il funzionamento dell'attuale provider Linq To Sql). cioè non esporre mai IQueryable
.
IQueryable
non è un'informazione specifica sulla persistenza. Il supporto di IQueryable potrebbe essere semplice come un array hard coded o potrebbe provenire da un file XML, un servizio Web, un database, un file flat, ecc. Non consiglierei un repository che non esponesse IQueryable come sempre porta ad un accesso lento ai dati in ogni caso, in cui l'esposizione di IQueryable consentirà ad alcune istanze di migliorare le prestazioni laddove applicabile se l'archivio di persistenza ha tale capacità. Inoltre, nascondere DbContext ti consente di passare a un ORM diverso se necessario (o no ORM!)
IN
clausola sql senza sapere come lo fa il provider LinqToSql specifico.