CQRS应用命令处理程序业务逻辑

时间:2015-03-25 15:03:25

标签: design-patterns domain-driven-design cqrs

我正在将样本CQSR应用于应用程序。我对应用逻辑规则感到困惑。

public class UserCommandHandler : ICommandHandler<CreateUserCommand>
{
    private readonly IUserRepository repository;

    public UserCommandHandler(IUserRepository repository)
    {
        this.repository = repository;
    }

    public void Handle(CreateUserCommand command)
    {
        User user = new User();
        user.Username = command.Username;
        user.Password = command.Password;
        user.Email = command.Email;
        user.CreteDate = DateTime.Now;
        // Rules
        var isUserDuplicated = repository.GetAll().Any(u => u.Username == command.Username);
        var isEmailDuplicated = repository.GetAll().Any(u => u.Email == command.Email);

        repository.Add(user);
        repository.Save();
    }
}
  1. 我可以在哪里应用商家规则来检查用户名是否重复或电子邮件是否重复。

  2. 我的命令处理程序无效。那么如何向用户发送重复通知?

1 个答案:

答案 0 :(得分:1)

独特的电子邮件地址和用户名实际上不是域关注的问题,因此可以使用简单的数据库约束或使用您拥有的应用程序处理程序逻辑来强制执行它们。应该为可能发生变化的规则和业务专家所说的规则保留域模型。

通知用户失败的最佳方法是没有失败:)命令应该很少失败,在这种情况下你会抛出异常。相反,您必须主动并验证输入客户端。您可以在客户端应用程序或网站中查询用户名是否唯一。如果它是唯一的,则发送命令。