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

Sha*_*ean 12 c# architecture design-patterns repository-pattern

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

void DeletePost(int postId, int userId);
Run Code Online (Sandbox Code Playgroud)

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

  1. 通过userId获取用户.
  2. 在对用户进行验证后调用delete.

我将有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);
Run Code Online (Sandbox Code Playgroud)

Cla*_*edi 10

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


Rus*_*Cam 9

我认为一些验证应该在你到达存储库之前,在域模型/业务层中进行.

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