Modèle de référentiel vs création d'objet DAL

9

Pour autant que je sache, le IRepositorydevrait contenir CRUD. Ensuite , nous héritons ce IRepositorydans nos autres interfaces comme IProductet mettons en œuvre IProductclasse 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 Libraryet il définir une classe Productavec des méthodes telles que GetAllProducts(), Top5Products().

Dans les deux DAL.Productet les Repo.ProductRepositoryclasses que nous initialize DB Contextde Entity Frameworket interroger nos données pertinentes.

L'appel est similaire dans les deux méthodes Repo.ProductRepositoryouDAL.ProductBLL

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).

M. Arslan
la source
@Neil Je pense qu'OP est familier avec DAL et demande si les dépôts sont juste d'autres interfaces pour faire les mêmes choses ou si c'est plus
Christophe
@Christophe exactement, je suis confus là-dessus. Si nous pouvions faire la même chose dans DAL, pourquoi utiliser le modèle repo?
M. Arslan

Réponses:

7

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, Storeetc.).

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;

  • DAL est un terme général pour résumer les problèmes d'accès aux données.
  • Le référentiel est un concept similaire, mais plus spécifique, de DDD.
  • Votre DAL sera probablement composé de plusieurs référentiels.
MetaFight
la source
4
Le référentiel est également un terme utilisé de manière plus générique en dehors de DDD pour faire référence à une collection d'objets en mémoire qui reflète les enregistrements de base de données. Dans ce contexte, il se situe entre le DAL et la couche logique métier. Voir martinfowler.com/eaaCatalog/repository.html
Robert Harvey
Pourquoi tout le monde essaie-t-il de donner du crédit à DDD pour tout?!
TheCatWhisperer
1
Aujourd'hui, j'ai appris: P
MetaFight
2

Vous comparez deux concepts différents et complémentaires:

  • La couche d'accès aux données est une couche architecturale qui a l'intention d'abstraire l'accès aux données. Il ne dit pas comment l'accès doit être abstrait.
  • Le référentiel est un modèle spécifique qui appartient au DAL (voir la liste des modèles à la fin de ce lien ). Il explique exactement comment abstraire un accès spécifique aux données: en offrant une interface de type collection au magasin de données.

Le DAL dans votre exemple

Fait intéressant, dans votre exemple de bibliothèque de classes, DAL.Productsemble ê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:

  • enregistrements actifs qui reposent sur une couche d'abstraction de base de données.
  • objets du domaine anémique (attention, anti-motif!) obtenus à partir d'une passerelle de données de ligne
  • ou, pourquoi pas, des objets de domaine obtenus à partir de différents objets de requête, où chaque requête implémenterait une manière particulière de récupérer l'objet
  • référentiels
  • un mélange de tous ceux

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.

Christophe
la source