Usuário com melhor resposta
O que é repositorio

Pergunta
-
Pessoal,
Lendo varios artigos estou confuso quanto ao pattern repository.
Algumas vezes parece que ele funciona apenas como uma classe que resgata informacos de um banco de dados e os mantem em memoria para uso posterior em UI, como se fosse um DTO.Alguem poderia me explicar melhor isso ?
Respostas
-
O Repository Pattern é um padrão para organizar suas classes criando uma forma de isolar o seu domínio da sua lógica de acesso a dados segundo Martin Folwer (veja nesse link).
Não é obrigatório usar com ORMs, no caso que você citou existe como acessar um ORM diretamente sem usar uma classe de repository. E existem classes de repository para lidar com qualquer fonte de dados, elas vindas de um ORM ou não.
A maioria dos ORMs usam internamente o repository pattern para organizar internamente seus acessos a dados. Eles então fornecem uma API que você pode usar diretamente ou criar sua própria camada de repository para isolar na sua aplicação a lógica de dados e o domínio.
Por que você acho que parece com DTO:
Ao usar um repository os dados vem da fonte de dados e você passa para o domínio, algumas pessoas passam direto para a UI. Como passam dados você entendeu que era um DTO, mas o padrão DTO cria estruturas para passar os dados entre camadas, diferente do repository que tem a ideia de isolar.
Como você pode ver a figura acima (leia mais na própria MSDN nesse link) O repository recebe uma ação da classe vinda do domínio (ou diretamente do cliente) e usa sua lógica para acessar o Data Source (que pode ser um banco de dados usando ADO.Net direto ou um ORM, ou um serviço, por exemplo).
A figura a seguir mostra como é um DTO, veja a diferença:Se quiser leia mais sobre DTo na própria MSDN nesse link
Um DTO só fornece dados, entre qualquer camada. Não precisa isolar uma outra, só passar dados.
Espero que eu tenha conseguido solucionar sua dúvida, sir AGA Neto, qualquer coisa dê um grito. Se foi útil a resposta marque como tal :D
Priscila Mayumi Sato - MayogaX
Co-lider do .Net Coders
- Sugerido como Resposta Diego de Almeida Barreto (Lewis) quarta-feira, 8 de janeiro de 2014 21:25
- Marcado como Resposta William John Adam TrindadeModerator quinta-feira, 9 de janeiro de 2014 14:13
Todas as Respostas
-
Ele não é DTO!
Ele é uma camada que melhora e muito o tráfego de informações, ele abstrai, ele organiza e faz com que sua aplicação separa as responsabilidades, aproveitamento de código etc ... mas, ele não é DTO ... ele trabalha com a parte de persistência dos dados (com camadas de persistência (ORM) Exemplo: Entity Framework) de maneira transparente!
Um link ótimo é esse tá bem fácil de entender: http://www.macoratti.net/11/10/net_pr1.htm
-
-
- Editado Fulvio Cezar Canducci Dias quarta-feira, 8 de janeiro de 2014 18:49
-
O Repository Pattern é um padrão para organizar suas classes criando uma forma de isolar o seu domínio da sua lógica de acesso a dados segundo Martin Folwer (veja nesse link).
Não é obrigatório usar com ORMs, no caso que você citou existe como acessar um ORM diretamente sem usar uma classe de repository. E existem classes de repository para lidar com qualquer fonte de dados, elas vindas de um ORM ou não.
A maioria dos ORMs usam internamente o repository pattern para organizar internamente seus acessos a dados. Eles então fornecem uma API que você pode usar diretamente ou criar sua própria camada de repository para isolar na sua aplicação a lógica de dados e o domínio.
Por que você acho que parece com DTO:
Ao usar um repository os dados vem da fonte de dados e você passa para o domínio, algumas pessoas passam direto para a UI. Como passam dados você entendeu que era um DTO, mas o padrão DTO cria estruturas para passar os dados entre camadas, diferente do repository que tem a ideia de isolar.
Como você pode ver a figura acima (leia mais na própria MSDN nesse link) O repository recebe uma ação da classe vinda do domínio (ou diretamente do cliente) e usa sua lógica para acessar o Data Source (que pode ser um banco de dados usando ADO.Net direto ou um ORM, ou um serviço, por exemplo).
A figura a seguir mostra como é um DTO, veja a diferença:Se quiser leia mais sobre DTo na própria MSDN nesse link
Um DTO só fornece dados, entre qualquer camada. Não precisa isolar uma outra, só passar dados.
Espero que eu tenha conseguido solucionar sua dúvida, sir AGA Neto, qualquer coisa dê um grito. Se foi útil a resposta marque como tal :D
Priscila Mayumi Sato - MayogaX
Co-lider do .Net Coders
- Sugerido como Resposta Diego de Almeida Barreto (Lewis) quarta-feira, 8 de janeiro de 2014 21:25
- Marcado como Resposta William John Adam TrindadeModerator quinta-feira, 9 de janeiro de 2014 14:13
-
-
Entao quais seriam as camadas dessa aplicacao ? 1.ui 2.bll 3. Dal (onde o ef estara) 4. Repository Entao a ui solicita a bll que solicita o repository e solicita a dal ? Desculpe minha ignorancia
Desculpa a demora.
Repository é um padrão que serve para algo parecido com a DAO.
Do jeito que você fala seria assim mesmo, apesar de não ser a maneira mais indicada.
Um exemplo bacana de arquitetura que usa repository: https://github.com/MayogaX/PantheonRepository
Priscila Mayumi Sato - MayogaX