Tanto quanto eu aprendi, o IRepository
deve conter CRUD
. Então nós herdamos esta IRepository
em nossas outras interfaces, como IProduct
e implementar IProduct
classe 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 Library
e nele definir uma classe Product
com métodos como GetAllProducts()
, Top5Products()
.
Em ambos os DAL.Product
e Repo.ProductRepository
as classes que inicializar DB Context
de Entity Framework
e consultar nossos dados relevantes.
A chamada é semelhante nos dois métodos Repo.ProductRepository
ou DAL.Product
emBLL
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
).
Respostas:
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;
fonte
Você está comparando dois conceitos diferentes e complementares:
O DAL no seu exemplo
Curiosamente, no seu exemplo de biblioteca de classes,
DAL.Product
parece 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:
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.
fonte