Pour autant que je sache, le IRepository
devrait contenir CRUD
. Ensuite , nous héritons ce IRepository
dans nos autres interfaces comme IProduct
et mettons en œuvre IProduct
classe concrète ProductRepository
, avec des méthodes telles que GetAllProducts()
, Top5Products()
.
Nous pourrions également faire de même avec une architecture à n niveaux. comme, Création DAL Class Library
et il définir une classe Product
avec des méthodes telles que GetAllProducts()
, Top5Products()
.
Dans les deux DAL.Product
et les Repo.ProductRepository
classes que nous initialize DB Context
de Entity Framework
et interroger nos données pertinentes.
L'appel est similaire dans les deux méthodes Repo.ProductRepository
ouDAL.Product
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-tiers avec ( Controller
, BLL Class Library
, DAL Class Library
).
Réponses:
Ma compréhension est:
DAL (Data Access Layer) fait référence à une couche dans votre logiciel qui se situe 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 .
Le référentiel est un concept de DDD (Domain Driven Design).
Dans DDD, un référentiel est responsable de l'encapsulation de tous les problèmes d'accès aux données pour un agrégat donné . Cela implique la responsabilité d'assurer la cohérence lors des lectures et des écritures de l'agrégat. Et un agrégat est un regroupement d'entités apparenté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
TL; DR;
la source
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 la mise en œuvre, c'est la même chose (dans ce cas spécifique).Mais ce n'est pas nécessaire; 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 la conception pilotée par domaine .
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 existe un référentiel unique par agrégat.
la source