Padrão de Repositório vs Criação de Objeto DAL

9

Tanto quanto eu aprendi, o IRepositorydeve conter CRUD. Então nós herdamos esta IRepositoryem nossas outras interfaces, como IProducte implementar IProductclasse concreta ProductRepository, com métodos como GetAllProducts(), Top5Products().

Também podemos fazer o mesmo com a arquitetura de n camadas. como, Criação DAL Class Librarye nele definir uma classe Productcom métodos como GetAllProducts(), Top5Products().

Em ambos os DAL.Producte Repo.ProductRepositoryas classes que inicializar DB Contextde Entity Frameworke consultar nossos dados relevantes.

A chamada é semelhante nos dois métodos Repo.ProductRepositoryou DAL.ProductemBLL

Em vista dessas semelhanças, minha pergunta: qual é o benefício do Repos? Eu posso fazer o mesmo com muita facilidade usando arquiteturas de n-tier com ( Controller, BLL Class Library, DAL Class Library).

M. Arslan
fonte
@Neil Eu acho que OP está familiarizado com DAL e pergunta se repositórios são apenas outras interfaces para fazer as mesmas coisas ou se é mais
Christophe
@Christophe exatamente, estou confuso sobre isso. Se pudéssemos fazer o mesmo no DAL, por que usar o padrão de repo?
M. Arslan

Respostas:

7

Meu entendimento é:

  • DAL (camada de acesso a dados) refere-se a uma camada em seu software que fica entre a tecnologia de persistência e a lógica do aplicativo. Seu objetivo é manter os problemas de acesso a dados separados dos demais problemas de aplicativos. É um conceito geral .

  • Repositório é um conceito do DDD (Domain Driven Design).

No DDD, um Repositório é responsável por encapsular todas as preocupações de acesso a dados para um determinado Agregado . Isso é responsabilidade de garantir consistência durante as leituras e gravações do agregado. E um agregado é um agrupamento de entidades relacionadas (por exemplo, Product, Store, etc.).

Portanto, um Repositório está especificamente ciente das preocupações de persistência e consistência de seu Agregado. Seu DAL geral provavelmente será composto de repositórios específicos

TL; DR;

  • DAL é um termo geral para abstrair as preocupações de acesso a dados.
  • Repositório é um conceito semelhante, mas mais específico, do DDD.
  • Seu DAL provavelmente será composto de vários repositórios.
MetaFight
fonte
4
Repositório também é um termo usado genericamente fora do DDD para se referir a uma coleção de objetos na memória que espelha os registros do banco de dados. Nesse contexto, fica entre o DAL e a camada lógica de negócios. Veja martinfowler.com/eaaCatalog/repository.html
Robert Harvey
Por que todo mundo tenta dar crédito ao DDD por tudo ?!
TheCatWhisperer
11
Hoje eu aprendi: P
MetaFight 14/09/18
2

Você está comparando dois conceitos diferentes e complementares:

  • A camada de acesso a dados é uma camada arquitetural que pretende abstrair o acesso aos dados. Não diz como o acesso deve ser abstraído.
  • O Repositório é um padrão específico que pertence ao DAL (consulte a lista de padrões no final deste link ). Ele diz exatamente como abstrair um acesso específico aos dados: oferecendo uma coleção como interface para o armazenamento de dados.

O DAL no seu exemplo

Curiosamente, no seu exemplo de biblioteca de classes, DAL.Productparece ser um repositório. Portanto, é normal que você realmente não veja diferença: do ponto de vista da implementação, é o mesmo (neste caso específico).
Mas não precisa; Um DAL pode ser implementado de maneira diferente, por exemplo:

  • registros ativos que dependem de uma camada de abstração de banco de dados.
  • objetos de domínio anêmicos (atenção, antipadrão!) obtidos de um gateway de dados de linha
  • ou, por que não, objetos de domínio obtidos de diferentes objetos de consulta, onde cada consulta implementaria uma maneira específica de recuperar o objeto
  • repositórios
  • uma mistura de todos aqueles

O que é diferente para o repositório

O conceito de repositório é independente do modelo arquitetural e da implementação. Você não precisa pensar em camadas ou banco de dados. Tudo o que você precisa saber quando cria seu domínio é que seus objetos estão em repositórios que são um tipo especial de coleção que oferece persistência. Isso os torna muito adequados para o design de domínio e explica por que eles são um elemento-chave do Design Orientado a Domínio .

No DDD, os repositórios têm mais algumas regras a serem respeitadas: dão acesso a agregados (uma entidade independente ou um grupo de entidades relacionadas dependentes de uma raiz agregada) e existe um único repositório por agregado.

Christophe
fonte