Si Entity Framework / DbContext est le DAL / Repository, où se situe-t-il dans une architecture à 3 niveaux?

J’ai lu des articles sur StackOverflow et d’autres sites toute la journée sur les meilleures pratiques en matière d’architecture et il y a tellement d’idées et d’opinions contradictoires.

J’ai finalement opté pour une approche, mais j’ai beaucoup de difficulté à décider où placer les objects EF (DbContext, API Fluent, Seeding data, etc.). Voici ce que j’ai actuellement:

Projet ASP.NET MVC : projet Web réel. Contient les vues standard, les contrôleurs et les modèles de vue (dans un dossier Modèles ).

Projet de modèle de domaine : contient toutes les classes POCO qui définissent les objects de firebase database (domaine). Actuellement, ne mentionne ni ne fait référence à aucun object EF.

Service Layer Project : contient les objects de service pour chaque type d’object de domaine (par exemple, IProductService, IOrderService, etc.). Chaque service référence des objects EF tels que DbSets et gère les règles commerciales – par exemple, append un produit, récupérer un produit, append un produit à une commande, etc.

La question est donc, dans cette configuration, où vont les classes EF? Au début, je pensais à la couche de services, mais cela ne semble pas avoir de sens. J’ai ensuite pensé à les placer dans la couche de modèle de domaine, mais cela a ensuite lié les modèles de domaine à EF, qui est essentiellement un DAL / Repository. Enfin, j’ai envisagé de créer un projet DAL distinct juste pour EF, mais cela semble être un énorme gâchis, car il contiendra probablement 3 ou 4 fichiers (DbContext et quelques autres petits fichiers).

Quelqu’un peut-il fournir des conseils?

Le modèle de domaine n’est pas nécessaire puisqu’il s’agira d’une redondance. Les classes EF peuvent directement agir en tant que modèle de domaine et elles sont converties en modèles de vue lors de leur envoi à ce dernier. EF peut être séparé en différentes bibliothèques de classes. La plupart d’entre eux utilisent un modèle de référentiel avec n’importe quel ORM, car il serait facile de les remplacer. Mais j’ai vu des critiques sur l’utilisation d’un modèle de référentiel, vérifiez ceci .

Voici ce que je fais:

Les données:

  • Une classe hérite de DbContext.
    • Il a tous les jeux de firebase database.
    • Remplace OnModelCreating.
    • Mappage des clés primaires et des relations.

Entités:

  • A toutes les classes de POCO.
    • Chaque propriété est décorée avec les annotations de données nécessaires.

Prestations de service:

  • Chaque service a des méthodes communes (GetList (), Find (), Create (), etc.).

Affaires:

  • Appelé à partir de clients, orchestrez à l’aide de services pour exécuter une tâche spécifique UserChangePassword (cela vérifiera si cela peut être effectué, puis exécutera la tâche ou renverra des statuts d’erreur / non autorisés parmi beaucoup d’autres pour que le client affiche les informations correctes concernant la tâche. sur mon cas est où je me connecte.

Clients (Desktop / Web / Wpf / etc).

Je ne dis pas que c’est la meilleure approche, je partage simplement ce qui a fonctionné pour moi.