Découplage ASP.NET identité MVC 5 pour permettre l'implémentation d'une application en couches
Je suis nouveau pour ASP.NET MVC et moi avons développé une application MVC 5 avec une authentification utilisateur individuelle. J'ai fait un motif en couches lorsque je fais mes applications comme séparer la couche de modèle, la couche DAL, les Repos, etc. etc. mais maintenant, dans MVC 5, je veux pouvoir utiliser la gestion et l'authentification des utilisateurs et des rôles qu'ils appellent Identity, puis avoir encore cette structure en couches à mon application car il semble que L'identité soit à peu près couplée au projet MVC lui-même avec l'utilisateur et les modèles de rôle là-bas et le contexte aussi.
Ce que j'ai fait dans mon application pour l'instant, c'est que j'ai toutes mes couches supposées être séparées comme mon Dal, UnitOfWork, Repos, autres modèles, etc. dans le projet MVC (dans des dossiers séparés!) juste pour le faire fonctionner, pour l'instant. Et je sais que ce n'est pas la bonne façon de le faire.
Quelqu'un peut-il me montrer quelques bons exemples ou articles à ce sujet ou l'expliquer directement si c'est possible ou non et comment? Google n'a pas été amical avec moi sur celui-ci. Merci!
1 réponses
Voici un Brouillon rapide de ce que j'essaierais...Je créerais ces couches:
- Contoso.Noyau (Bibliothèque De Classes)
- Contoso.Données (Bibliothèque De Classes)
- Contoso.Service (Bibliothèque De Classes)
- Contoso.Web.Cadre (Bibliothèque De Classes)
- Contoso.Web (ASP.NET MVC 5.0)
Contoso.Noyau:
Cette couche contient toutes mes entités / classes représentant mes TABLES de base de données.
Par exemple, j'aurais a:
- utilisateur.cs de la classe.
- produit.classe cs
- ProductDetail.classe cs
- etc..
Certaines personnes appellent ces entités / classes: les objets de domaine, d'autres l'appellent les classes POCO.
Soit ou, ces entités / classes sont définies dans la couche centrale puisqu'elles peuvent (ou non) être utilisées parmi les autres couches.
Contoso.Données:
Cette couche est l'endroit où je définis ma classe ContosoDbContext.cs
. Il est à l'intérieur de ce fichier que j'ai tous mes DbSet<>
définis.
Ainsi, par exemple, j'aurais ce qui suit dans mon ContosoDbContext.cs
:
- Utilisateur public DbSet { get; set;}
- produit Public DbSet { get; set;}
- public DbSet ProductDetail { get; set;}
Inutile de dire, le Contoso.La couche de données aura une dépendance sur la couche Contoso.Core
.
De plus, c'est à l'intérieur de cette couche Contoso.Data
que j'aurais mon référentiel générique et tout ce qui est lié à " data accès".
Contoso.Service:
Cette couche serait l'endroit où je placerais toutes mes règles métier. Par exemple, je peux avoir une classe UserService.cs
qui pourrait avoir une méthode Login()
. La méthode Login () recevrait un nom d'utilisateur / mot de passe et appellerait le référentiel pour rechercher l'utilisateur.
Parce que la couche de Service a besoin du référentiel, j'aurai une dépendance sur la couche Contoso.Data
et parce que je vais jouer avec la classe User (qui vit à l'intérieur de la Contoso.Core
couche), j'aurai aussi une dépendance sur la couche Contoso.Core
.
Contoso.Web.Cadre:
Cette couche aurait une dépendance sur le Contoso.Core
, Contoso.Data
et Contoso.Service
.
J'utiliserais cette couche Contoso.Web.Framework
pour configurer mon Injection de dépendance.
Contoso.Web:
La dernière couche, l'application MVC 5.0, aurait une dépendance sur les Contoso.Web.Framework
et sur les Contoso.Service
et sur les Contoso.Core
couches.
Les contrôleurs, invoqueraient des méthodes vivre à l'intérieur des classes définies dans votre couche Contoso.Service
(par exemple la méthode Login ()).
La méthode Login () peut ou non, par exemple, renvoyer une classe Utilisateur (null ou peuplée) et parce qu'elle renvoie une classe Utilisateur et parce que nous sommes à l'intérieur d'un contrôleur, notre couche Contoso.Web
a besoin d'une dépendance sur Contoso.Service
et Contoso.Core
.
Bien sûr, je n'ai pas tout détaillé ici ou chaque couche mais c'est juste pour vous donner un exemple du type d'architecture que je ferais utiliser.
Jusqu'à présent, je n'ai pas répondu à votre question mais avec peu de choses que je connais sur MVC 5.0 et son nouveau mécanisme D'identité, je crois que la couche Contoso.Core
devrait avoir une dépendance sur Microsoft.AspNet.Identity.EntityFramework
en plus du Microsoft.AspNet.Identity.Core
De même, ma classe ContosoDbContext.cs
devrait implémenter l'interface IdentityDbContext
qui appartient à la Microsoft.AspNet.Identity.EntityFramework.dll
.
Cela signifie que mon Contoso.Data
couche aurait une dépendance sur Microsoft.AspNet.Identity.EntityFramework
, probablement de la Microsoft.AspNet.Identity.Core
ainsi...
Comme vous le dites, lorsque vous créez un nouveau projet MVC 5.0, tout cela existe et est défini dans l'application unique. Rien n'est ou n'a été découplé en couches. Ainsi, dans l'architecture ci-dessus, la classe ContosoDbcontext.cs
vit à l'intérieur de la couche Contoso.Data
et non directement à l'intérieur de la ASP.NET application MVC.
Depuis que je n'ai pas essayé le nouveau ASP.NET identité ni Ai-je essayé de découpler les choses autour, Je ne saurais pas comment répondre honnêtement à votre question. Je suppose que vous devrez essayer de faire bouger les choses.
Si et quand vous faire, n'hésitez pas à nous dire comment ça s'est passé et quelles sont les choses/problèmes rencontrés.
Pendant ce temps, j'espère que cela vous a aidé à faire la lumière (ou non).
Vince