从存储库调用存储库

时间:2009-07-27 11:33:08

标签: repository-pattern

我有两个存储库目录和用户,我有一种情况需要在用户仓库的目录仓库中调用一个方法,这是一个好的做法还是有更好的方法?

3 个答案:

答案 0 :(得分:9)

您不应该在您的存储库中处理这种授权检查。像“此用户需要发布X评论”这样的业务规则实际上不是存储库查询,而是用户的属性。

此外,在应用程序中非常频繁地进行授权调用,并且您确实不希望每次需要检查时都访问数据库。

您应该将这些权限正确加载到User对象中,然后为当前请求缓存该用户对象,并使用您的域名:

public class Service {

    public void Save(Post post)
    {
        if(User.GetCurrentUser().HasEnoughCommentsToPost())
            postRepository.Add(post);
    }

}

答案 1 :(得分:6)

我会在上层引用其他存储库,例如服务层

答案 2 :(得分:0)

我认为在您的情况下,授权是您的域逻辑的一部分。因此,我将在我的域层中创建一个名为AuthorizationPolicy的抽象类或接口(可能您可以在您的域附近找到更好的名称)。在调用存储库上的方法之前,客户端应检查是否具有基于策略的权限。

另一种解决方案,因为存储库的接口也是业务逻辑的一部分,您可以为存储库创建一个基类,用于检查用户的权限并将其余部分委托给派生类。

如果需要,AuthorizationPolicy的实现将与Catalog类通信。这样两个存储库就可以很好地解耦了。