我是ASP.NET MVC的新手,并且一直在开发具有个人用户身份验证的MVC 5应用程序。我在进行诸如分离模型层,DAL层,Repos等之类的应用程序时一直在进行分层模式,但是现在在MVC 5中,我希望能够使用用户和角色管理以及它们称为身份的身份验证。 ,然后在我的应用程序中仍然具有该分层结构,因为现在看来Identity几乎与MVC项目本身(那里的用户和角色模型以及上下文)结合在一起。

我现在在应用程序中所做的是,在MVC项目中(在单独的文件夹中),我有所有我应该分开的层,如DAL,UnitOfWork,Repos,其他模型等,只是为了使其正常工作,现在。我知道这不是正确的方法。

因此,有谁能指出一些有关此的好的示例或文章,或者直接解释(如果可能)以及如何解释? Google对此并不友好。谢谢!

最佳答案

这是我要尝试的内容的快速草稿...我将创建这些层:

  • Contoso.Core(类库)
  • Contoso.Data(类库)
  • Contoso.Service(类库)
  • Contoso.Web.Framework(类库)
  • Contoso.Web(ASP.NET MVC 5.0)

  • Contoso.Core:

    该层包含代表数据库表的所有实体/类。

    因此,例如,我将有:
  • User.cs类。
  • Product.cs类
  • ProductDetail.cs类
  • 等..

  • 有些人将这些实体/类称为:域对象,其他人将其称为POCO类。

    这些实体/类要么在核心层中定义,要么可以在其他层之间使用(也可以不使用)。

    Contoso.Data:

    该层是我定义ContosoDbContext.cs类的地方。我在其中定义了所有的DbSet<>
    因此,例如,我在ContosoDbContext.cs中包含以下内容:
  • public DbSet用户{放;
  • 公共(public)DbSet产品{get;放;
  • public DbSet ProductDetail {get;放;

  • 不用说,Contoso.Data层将在Contoso.Core层上具有依赖关系。
    另外,在Contoso.Data层中,我将拥有通用存储库以及与“数据访问”相关的任何内容。

    Contoso.Service:

    这层是我放置所有业务规则的地方。例如,我可能有一个UserService.cs类,该类可以具有Login()方法。 Login()方法将接收用户名/密码,然后调用存储库以查找用户。

    因为服务层需要存储库,所以我将在Contoso.Data层上具有依赖关系,并且因为我将使用User类(恰好位于Contoso.Core层内),所以我还将在Contoso.Core层上具有依赖关系。

    Contoso.Web.Framework:

    该层将依赖Contoso.CoreContoso.DataContoso.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.ServiceContoso.Core依赖。

    当然,我没有在这里或每一层详细介绍所有内容,但这只是为了举例说明我将使用的架构类型。

    到目前为止,我还没有回答您的问题,但是我对MVC 5.0及其新的Identity机制了解甚少,我相信Contoso.Core层除了Microsoft.AspNet.Identity.EntityFramework之外还需要依赖Microsoft.AspNet.Identity.Core
    同样,我的ContosoDbContext.cs类将需要实现碰巧属于IdentityDbContextMicrosoft.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/

    10-09 01:19