Pour autant que je sache, le IRepository
devrait contenir CRUD
. Ensuite, nous héritons de ce IRepository
dans nos autres interfaces comme IProduct
et implémentons IProduct
concrete class ProductRepository
, avec des méthodes comme GetAllProducts()
, Top5Products()
.
Nous pourrions également faire de même avec une architecture à n niveaux. comme, Créer DAL Class Library
et y définir une classe Product
avec des méthodes comme GetAllProducts()
, Top5Products()
.
Dans les classes DAL.Product
Et Repo.ProductRepository
, Nous initialisons DB Context
De Entity Framework
Et interrogons nos données pertinentes.
L'appel est similaire dans les deux méthodes Repo.ProductRepository
Ou DAL.Product
De BLL
Compte tenu de ces similitudes, ma question quel est l'avantage de Repos? Je peux faire la même chose avec beaucoup de facilité en utilisant des architectures à n niveaux avec (Controller
, BLL Class Library
, DAL Class Library
).
Ma compréhension est:
DAL (Data Access Layer) fait référence à une couche dans votre logiciel qui se trouve entre votre technologie de persistance et votre logique d'application. Son objectif est de séparer les problèmes d'accès aux données du reste des problèmes de votre application. C'est un concept ( général .
Repository est un concept de DDD (Domain Driven Design).
Dans DDD, un Repository est responsable de l'encapsulation de tous les problèmes d'accès aux données pour un Aggregate donné. Cela implique la responsabilité d'assurer la cohérence lors des lectures et écritures de l'agrégat. Et un agrégat est un regroupement d'entités liées (par exemple, Product
, Store
, etc.).
Ainsi, un référentiel est spécifiquement conscient des problèmes de persistance et de cohérence de son agrégat. Votre DAL général sera très probablement composé de référentiels spécifiques
Vous comparez deux concepts différents et complémentaires:
Le DAL dans votre exemple
Fait intéressant, dans votre exemple de bibliothèque de classes, DAL.Product
semble être un référentiel. Il est donc normal que vous ne voyiez pas vraiment de différence: du point de vue de l'implémentation, c'est la même chose (dans ce cas spécifique).
Mais ce n'est pas obligatoire; Un DAL peut être implémenté différemment, par exemple:
Ce qui est différent pour le référentiel
Le concept de référentiel est indépendant du modèle architectural et de la mise en œuvre. Vous n'avez pas besoin de penser aux couches ou à la base de données. Tout ce que vous devez savoir lorsque vous concevez votre domaine, c'est que vos objets sont dans des référentiels qui sont un type spécial de collection qui offre de la persistance. Cela les rend très adaptés à la conception de domaine et explique pourquoi ils sont un élément clé de Domain Driven Design .
Dans DDD, les référentiels ont d'autres règles à respecter: ils donnent accès à des agrégats (une entité indépendante ou un groupe d'entités liées dépendant d'une racine d'agrégat) et il y a un seul référentiel par agrégat.