当我使用存储库模式时,我在哪里放置业务逻辑?

Mar*_*kus 2 repository-pattern

我正在为我的应用程序使用存储库模式.我有一个类用户.用户通过电子邮件识别.UserRepository包含方法CreateUser(用户用户).有一条业务规则说用户应该拥有唯一的电子邮件.

我想实现一个事务,首先检查是否正在使用电子邮件,如果没有,则创建用户.我应该在哪里放置负责检查电子邮件唯一性的代码?

这绝对是一个商业规则; 这是商业逻辑.我认为将此检查放在我的UserRepository实现中是不正确的.

Joh*_*lla 6

这种事情通常在(1)服务或(2)作为数据库约束(并且经常两者)直接进入模式.

使用服务,您不直接从客户端代码访问存储库; 您调用的服务可以为您执行有用的操作.

例如,类似于:

public class UserService : ... {
  private Repository<User> _userRepository;

  public void CreateUser(User u) {
    // Verify that the user's email is unique.
    if ( ... ) {
      _userRepository.Create(u);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)