验证检查在存储库模式中的位置?

时间:2011-01-04 21:38:43

标签: c# design-patterns architecture repository-pattern

假设我有一个名为User的实体,它有很多帖子。我的服务看起来像这样删除帖子:

void DeletePost(int postId, int userId);

我的验证码在哪里? (确保用户有权删除)。我应该在1个数据库调用的存储库中执行此操作吗?或者我应该在我打2次电话的服务层中进行检查:

  1. 通过userId获取用户。
  2. 在对用户进行验证后调用delete。
  3. 我将有2个存储库,1个用户和1个帖子,每个都看起来像这样:

    // 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);
    

2 个答案:

答案 0 :(得分:10)

这是一个业务规则,所以我不会把它放在数据访问层(Repository)上。我说最好的地方是服务层。

答案 1 :(得分:9)

我认为某些验证应该在您到达域模型/业务层中的存储库之前进行。

您可以选择深入验证并在存储库层中执行验证;根据验证的内容,这可能是也可能不是一个好主意;如果验证是特定于域的,那么验证应该在域模型中。另一方面,如果验证的域特定性较低且性质较为通用,则将其置于存储库/数据访问层中意味着可以在其中重用数据访问层的其他项目中重用验证。