我是ASP.NET MVC的新手,并且一直在开发具有个人用户身份验证的MVC 5应用程序。我在进行诸如分离模型层,DAL层,Repos等之类的应用程序时一直在进行分层模式,但是现在在MVC 5中,我希望能够使用用户和角色管理以及它们称为身份的身份验证。 ,然后在我的应用程序中仍然具有该分层结构,因为现在看来Identity几乎与MVC项目本身(那里的用户和角色模型以及上下文)结合在一起。
我现在在应用程序中所做的是,在MVC项目中(在单独的文件夹中),我有所有我应该分开的层,如DAL,UnitOfWork,Repos,其他模型等,只是为了使其正常工作,现在。我知道这不是正确的方法。
因此,有谁能指出一些有关此的好的示例或文章,或者直接解释(如果可能)以及如何解释? Google对此并不友好。谢谢!
最佳答案
这是我要尝试的内容的快速草稿...我将创建这些层:
Contoso.Core:
该层包含代表数据库表的所有实体/类。
因此,例如,我将有:
有些人将这些实体/类称为:域对象,其他人将其称为POCO类。
这些实体/类要么在核心层中定义,要么可以在其他层之间使用(也可以不使用)。
Contoso.Data:
该层是我定义
ContosoDbContext.cs
类的地方。我在其中定义了所有的DbSet<>
。因此,例如,我在
ContosoDbContext.cs
中包含以下内容:不用说,Contoso.Data层将在
Contoso.Core
层上具有依赖关系。另外,在
Contoso.Data
层中,我将拥有通用存储库以及与“数据访问”相关的任何内容。Contoso.Service:
这层是我放置所有业务规则的地方。例如,我可能有一个
UserService.cs
类,该类可以具有Login()
方法。 Login()方法将接收用户名/密码,然后调用存储库以查找用户。因为服务层需要存储库,所以我将在
Contoso.Data
层上具有依赖关系,并且因为我将使用User类(恰好位于Contoso.Core
层内),所以我还将在Contoso.Core
层上具有依赖关系。Contoso.Web.Framework:
该层将依赖
Contoso.Core
,Contoso.Data
和Contoso.Service
。我将使用此
Contoso.Web.Framework
层来配置我的依赖注入(inject)。Contoso.Web:
最后一层,即MVC 5.0应用程序,将依赖于
Contoso.Web.Framework
AND和Contoso.Service
AND以及Contoso.Core
层。Controller 将调用位于
Contoso.Service
层中定义的类内的方法(例如Login()方法)。例如,Login()方法可能会或可能不会返回User类(空或已填充),并且因为它返回了User类,并且由于我们在Controller内,所以我们的
Contoso.Web
层需要对Contoso.Service
和Contoso.Core
依赖。当然,我没有在这里或每一层详细介绍所有内容,但这只是为了举例说明我将使用的架构类型。
到目前为止,我还没有回答您的问题,但是我对MVC 5.0及其新的Identity机制了解甚少,我相信
Contoso.Core
层除了Microsoft.AspNet.Identity.EntityFramework
之外还需要依赖Microsoft.AspNet.Identity.Core
同样,我的
ContosoDbContext.cs
类将需要实现碰巧属于IdentityDbContext
的Microsoft.AspNet.Identity.EntityFramework.dll
接口(interface)。这意味着我的
Contoso.Data
层将对Microsoft.AspNet.Identity.EntityFramework
以及最可能的Microsoft.AspNet.Identity.Core
也具有依赖性...如您所说,当您创建一个新的MVC 5.0项目时,所有这些都存在并在单个应用程序中定义。没有任何东西已经或已经解耦为层。因此,在上述体系结构中,
ContosoDbcontext.cs
类位于Contoso.Data
层内部,而不是直接位于ASP.NET MVC应用程序内部。由于我没有尝试过新的ASP.NET身份,也没有尝试解耦,所以我不知道该如何诚实地回答您的问题。我猜您将不得不尝试移动。
如果这样做的时间和时间,请随时告诉我们它的发展过程以及遇到的问题/问题。
同时,我希望这可以帮助您了解(或不了解)。
文斯
关于c# - 解耦ASP.NET MVC 5身份以允许实现分层应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20375432/