【问题标题】:Architecture and Microsoft.AspNet.Providers体系结构和 Microsoft.AspNet.Providers
【发布时间】:2013-04-02 01:23:57
【问题描述】:

我已经在谷歌上搜索了几个小时,但找不到与我需要的内容完全相关的文章。

我有一个包含以下层的 MVC4 站点:

  • 表示层 (MVC4)
  • 业务层
  • 数据层

我想使用以下提供程序:(使用 NuGet 安装) 安装包 Microsoft.AspNet.Providers

我的问题更多的是建筑问题。

在我看来,我应该在我的数据层中安装这个 (Microsoft.AspNet.Providers),因为它是与会员数据库对话的代码。

然而,我能找到的所有帖子,即使是 Hanselman 也只需将其安装在表示层/MVC4 中。

我非常重视关注点分离,并在整个应用程序中使用依赖注入。

显然我需要在我的 web.config 中为提供者配置配置,但我希望在我的数据层中使用所有成员代码。

有什么想法吗?

谢谢 俄罗斯

PS。很想知道使用 nuget 在数据/存储库层中安装它的过程。对于 Nuget 正在安装的 DLL 有点困惑。如果我安装在我的数据层中,nuget 不会更新 MVC web.config。

【问题讨论】:

  • 什么是“MVC 层”? MVC 中的 M 代表 Model;它你的数据层。我认为您的会员代码应该在 Repository 对象中。
  • @RobertHarvey ,模型不是“数据层”,而是“业务逻辑层”。魔鬼在细节中=P
  • @tereško:如你所愿,但我没有将我的业务逻辑放入模型中。它要么在存储库中,要么在它自己的层中。从技术上讲,我想这都是模型的一部分。
  • @RobertHarvey:正确。我会说模型是控制器用来获取视图所需信息的一切。
  • @RobertHarvey ,您所说的“模型”实际上是域对象。在 MVC 中,您有两个主要层:表示层和模型层。表示层包含视图、控制器、模板和其他用于 UI 逻辑的东西。模型层包含领域对象、服务、存储库等。

标签: model-view-controller architecture dependency-injection inversion-of-control membership-provider


【解决方案1】:

答案实际上很简单:您应该将提供者隐藏在您在业务层中定义的抽象 后面。这样,您可以编写一个 adapter 来实现此抽象并包装提供程序,然后您可以使用 dependency injection 将此适配器inject 到您的业务层中。这样,您只需从 MVC4 项目中引用 Microsoft.AspNet.Providers,并防止任何代码直接引用 AspNet.Providers,这样您以后可以更轻松地切换。

例子:

// Define in business layer
public interface IAuthorizationService
{
    bool bool IsCurrentUserInRole(string role);
}

public class SomeBusinessLayerCommand
{
    private IAuthorizationService authorizer;

     public SomeBusinessLayerCommand(
         IAuthorizationService authorizer)
     {
         this.authorizer = authorizer;
     }

     public void SomeOperation()
     {
         if (this.authorizer.UserIsInRole("Admins"))
         {
             // some secret admin stuf
         }
         else
         {
             // some normal user stuf
         }
     }
}

您可以在表示层中定义一个适配器:

public class MembershipAdapter : IAuthorizationService
{
    public bool IsCurrentUserInRole(string role)
    {
        return Roles.IsUserInRole(role);
    }
}

您可以使用您最喜欢的 DI 容器将 IAuthorizationService 映射到 MembershipAdapter

【讨论】:

  • 感谢@Steven,感谢。当我喜欢重新开始时,我会尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多