¿Puede alguien explicarme el Patrón de repositorio en .NET, paso a paso, dando un ejemplo o demostración muy simple?
Sé que esta es una pregunta muy común, pero hasta ahora no he encontrado una respuesta satisfactoria.
c#
asp.net
design-patterns
repository
Sa Patil
fuente
fuente
Respuestas:
Como resumen, describiría el impacto más amplio del patrón de repositorio. Permite que todo su código use objetos sin tener que saber cómo persisten los objetos. Todo el conocimiento de la persistencia, incluida la asignación de tablas a objetos, está contenido de forma segura en el repositorio.
Muy a menudo, encontrará consultas SQL dispersas en la base de código y cuando viene a agregar una columna a una tabla, debe buscar archivos de código para intentar encontrar los usos de una tabla. El impacto del cambio es de gran alcance.
Con el patrón de repositorio, solo necesitaría cambiar un objeto y un repositorio. El impacto es muy pequeño.
Quizás sería útil pensar por qué usaría el patrón de repositorio. Aquí hay algunas razones:
Tiene un solo lugar para realizar cambios en su acceso a datos
Tiene un solo lugar responsable de un conjunto de tablas (generalmente)
Es fácil reemplazar un repositorio con una implementación falsa para las pruebas, por lo que no necesita tener una base de datos disponible para sus pruebas unitarias
También hay otros beneficios, por ejemplo, si estaba usando MySQL y quería cambiar a SQL Server, ¡pero en realidad nunca lo había visto en la práctica!
fuente
IConnection
,ICommand
, etc parte que oculta el tipo de base de datos. El repositorio suele estar más centrado en el dominio.Este es un buen ejemplo: el ejemplo de patrón de repositorio en C #
Básicamente, el repositorio oculta los detalles de cómo exactamente los datos se obtienen / persisten de / a la base de datos. Debajo de las sábanas:
fuente
IDbContext
) o en nhibernate (ISession
) directamente. Un repositorio implementado correctamente extrae TODA la información específica de persistencia (como cómo funciona el proveedor actual de Linq To Sql). es decir, nunca exponerIQueryable
.IQueryable
no es información específica de persistencia. El respaldo de IQueryable podría ser tan simple como una matriz codificada, o podría ser de un archivo XML, servicio web, base de datos, archivo plano, etc. No recomendaría un repositorio que no exponga IQueryable como siempre conduce a un acceso lento a los datos en todos los casos, donde exponer IQueryable permitirá que algunas instancias realicen mejoras de rendimiento cuando corresponda si el almacén de persistencia tiene esa capacidad. Además, ocultar DbContext le permite cambiar a un ORM diferente si es necesario (¡o no ORM!)IN
cláusula sql sin saber cómo lo hace el proveedor específico de LinqToSql.