【问题标题】:CQRS applying command handler business logicCQRS 应用命令处理程序业务逻辑
【发布时间】:2015-03-25 15:03:25
【问题描述】:

我正在将示例 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. 我的命令处理程序无效。那么如何向用户发送重复通知呢?

【问题讨论】:

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


    【解决方案1】:

    电子邮件地址和用户名的唯一性并不是真正的域问题,因此可以通过简单的数据库约束或像您一样使用应用程序处理程序逻辑来强制执行它们。域模型应该保留给可能会改变的规则和业务专家谈论的规则。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2021-06-22
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多