Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储库模式中的验证检查在哪里?_C#_Design Patterns_Architecture_Repository Pattern - Fatal编程技术网

C# 存储库模式中的验证检查在哪里?

C# 存储库模式中的验证检查在哪里?,c#,design-patterns,architecture,repository-pattern,C#,Design Patterns,Architecture,Repository Pattern,假设我有一个名为User的实体,它有许多帖子。对于删除帖子,我的服务如下所示: void DeletePost(int postId, int userId); 我的验证代码在哪里?(确保用户具有删除权限)。我是否应该在存储库中通过1个数据库调用执行此操作?或者我应该在服务层执行此检查,在该层我进行了2次调用: 通过userId获取用户 对用户进行验证后调用delete 我将有两个存储库,一个用于用户,一个用于帖子,每个存储库如下所示: // From the PostRepository.

假设我有一个名为User的实体,它有许多帖子。对于删除帖子,我的服务如下所示:

void DeletePost(int postId, int userId);
我的验证代码在哪里?(确保用户具有删除权限)。我是否应该在存储库中通过1个数据库调用执行此操作?或者我应该在服务层执行此检查,在该层我进行了2次调用:

  • 通过userId获取用户
  • 对用户进行验证后调用delete
  • 我将有两个存储库,一个用于用户,一个用于帖子,每个存储库如下所示:

    // From the PostRepository.
    void Delete(int postId); //May have to add a userId param if I do validation in repository
    //From the UserRepository.
    User GetUser(int userId);
    

    这是一条业务规则,因此我不会将其放在数据访问层(存储库)上。我认为最好的地方是服务层。

    我认为在进入存储库之前,应该进行一些验证,即在域模型/业务层

    您可以选择深入验证,也可以在存储库层执行验证;这可能是一个好主意,也可能不是一个好主意,这取决于验证的目的;如果验证是特定于域的,那么我觉得验证应该在域模型中。另一方面,如果验证在本质上不太特定于领域,更一般,那么将其放在存储库/数据访问层意味着可以在重用数据访问层的其他项目中重用验证