Avantage de L'utilisation de L'Unité de travail et des modèles de dépôt avec le cadre de L'entité
Selon MSDN,DbContext
est défini comme suit:
représente une combinaison des modèles D'Unités de travail et de dépôts et vous permet d'interroger une base de données et de regrouper les changements qui écrit ensuite vers le magasin comme une unité.
Depuis DbContext
implémente L'Unité de travail et les modèles de dépôt, alors pourquoi cela ASP.NET tutorial et d'autres ressources que j'ai trouvé sur Internet démontrer l'utilisation de DbContext
avec des implémentations personnalisées de l'Unité de travail et des modèles de dépôt? N'est-ce pas un pléonasme?
Si , Quel est l'avantage de créer des implémentations personnalisées de l'Unité de travail et des couches de dépôt en utilisant DbContext
? (Je peux voir comment cela pourrait avoir un sens dans un projet D'essai.)
2 réponses
Oui, DbContext
représente une unité de travail et DbSet
représente un dépôt, mais certaines personnes vont créer une couche d'abstraction sur eux. Voici quelques raisons pour lesquelles les gens pourraient le faire:
- peut-être qu'ils ne veulent pas que leur projet soit étroitement lié au cadre de L'entité et à son architecture. Ainsi, ils cachent le cadre D'entité derrière ces abstractions pour pouvoir substituer le cadre D'entité à n'importe quel autre ORM sans aucune modification à l'interface de l'accès aux données couche.
- ils utilisent des dépôts pour indiquer clairement quelles opérations sont autorisées pour certaines entités. (Par exemple,
CustomerRepository
peut permettre d'ajouter et de mettre à jour des clients mais pas de les supprimer). d'autre part, il permet à un développeur client de reconnaître facilement les opérations disponibles pour certaines entités. En d'autres termes, ils créent des référentiels avec des conventions de nommage et des interfaces compatibles avec le langage de domaine. - Déménagement les opérations liées aux bases de données vers les dépôts vous permettent d'intercepter ces opérations et d'effectuer la journalisation, le réglage des performances ou toute autre opération que vous voulez.
- certains le font pour faciliter les tests. Dis que j'ai un
ICustomerRepository
interface avec trois méthodes. Alors je peux facilement me moquer de ça au lieu de me moquer d'unIDbSet<Customer>
avec trop de méthodes. - enfin, il y en a beaucoup qui ne pas créer une abstraction sur
DbContext
etDbSet
. Ils ont juste de les utiliser directement et il est parfaitement valable de le faire.
je sais que c'est trop tard
Pour L'Unité De Travail : Lorsque vous extrayez des données d'une base de données, il est important de garder une trace de ce que vous avez changé.De même, vous devez insérer de nouveaux objets vous Créez et supprimez tout objet que vous supprimez.
vous pouvez modifier la base de données à chaque modification de votre modèle d'objet, mais cela peut conduire à beaucoup de très petits appels de base de données.
une unité de travail garde une trace de tout ce que vous faites pendant une transaction d'affaires qui peut affecter la base de données.
Pour Le Motif Du Dépôt: C'est un domaine d'affaires isolé de la base de données.
Lire le livre (PEAA)