Alguém pode me explicar o Padrão do Repositório no .NET, passo a passo, dando um exemplo ou demonstração muito simples.
Sei que essa é uma pergunta muito comum, mas até agora não encontrei uma resposta satisfatória.
c#
asp.net
design-patterns
repository
Sa Patil
fonte
fonte
Respostas:
Como um resumo, eu descreveria o impacto mais amplo do padrão do repositório. Ele permite que todo o seu código use objetos sem precisar saber como os objetos são persistidos. Todo o conhecimento de persistência, incluindo o mapeamento de tabelas para objetos, está contido com segurança no repositório.
Muitas vezes, você encontra consultas SQL espalhadas na base de código e, quando adiciona uma coluna a uma tabela, precisa pesquisar arquivos de código para tentar encontrar os usos de uma tabela. O impacto da mudança é abrangente.
Com o padrão do repositório, você precisaria alterar apenas um objeto e um repositório. O impacto é muito pequeno.
Talvez ajude a pensar por que você usaria o padrão de repositório. Aqui estão alguns motivos:
Você tem um único local para fazer alterações no seu acesso a dados
Você tem um único local responsável por um conjunto de tabelas (geralmente)
É fácil substituir um repositório por uma implementação falsa para teste - assim você não precisa ter um banco de dados disponível para seus testes de unidade
Também existem outros benefícios, por exemplo, se você estava usando o MySQL e queria mudar para o SQL Server - mas eu nunca vi isso na prática!
fonte
IConnection
,ICommand
, etc parte que os couros do tipo de base de dados. O repositório geralmente é mais centrado no domínio.Este é um bom exemplo: O Exemplo de Padrão de Repositório em C #
Basicamente, o repositório oculta os detalhes de como exatamente os dados estão sendo buscados / persistidos do / para o banco de dados. Debaixo das cobertas:
fonte
IDbContext
) ou no nhibernate (ISession
) diretamente. Um repositório implementado corretamente abstrai TODAS as informações específicas sobre persistência (como o atual provedor Linq To Sql funciona). ou seja, nunca exponhaIQueryable
.IQueryable
não é uma informação específica de persistência. O apoio do IQueryable pode ser tão simples quanto uma matriz codificada, ou pode ser de um arquivo XML, serviço web, banco de dados, arquivo simples etc. Não recomendo um repositório que não exponha o IQueryable como sempre leva ao acesso lento aos dados em todos os casos, onde a exposição ao IQueryable permitirá que algumas instâncias realizem aprimoramentos de desempenho, quando aplicável, se o armazenamento de persistência tiver esse recurso. Além disso, se escondendo DbContext permite mudar para um ORM diferente em caso de necessidade (ou não ORM!)IN
cláusula sql sem saber como o provedor LinqToSql específico faz isso.