none
O que é repositorio RRS feed

  • 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 ? 

    terça-feira, 7 de janeiro de 2014 20:40

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

    quarta-feira, 8 de janeiro de 2014 21:10

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


    Fulvio Cezar Canducci Dias

    quarta-feira, 8 de janeiro de 2014 00:46
  • Pelo que vejo, o Repository esta entre a ORM e os objetos.
    Entao pq nao os objetos acessarem diretamente orm ? Pq a razao do Repository ?
    quarta-feira, 8 de janeiro de 2014 17:41
  • Qual Objetos?

    A resposta o Respository é aquela que eu disse e foi complementada pelo site daquele link


    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

    quarta-feira, 8 de janeiro de 2014 21:10
  • 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
    segunda-feira, 3 de fevereiro de 2014 07:37
  • 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

    sexta-feira, 28 de fevereiro de 2014 15:27