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

Design patterns 应用命令处理程序业务逻辑的CQRS,design-patterns,domain-driven-design,cqrs,Design Patterns,Domain Driven Design,Cqrs,我正在将示例CQSR应用于一个应用程序。我对应用逻辑规则感到困惑 公共类UserCommandHandler:ICommandHandler { 专用只读IUSER存储库; 公共UserCommandHandler(IUserRepository存储库) { this.repository=存储库; } 公共无效句柄(CreateUserCommand) { 用户=新用户(); user.Username=command.Username; user.Password=command.Passw

我正在将示例CQSR应用于一个应用程序。我对应用逻辑规则感到困惑

公共类UserCommandHandler:ICommandHandler
{
专用只读IUSER存储库;
公共UserCommandHandler(IUserRepository存储库)
{
this.repository=存储库;
}
公共无效句柄(CreateUserCommand)
{
用户=新用户();
user.Username=command.Username;
user.Password=command.Password;
user.Email=command.Email;
user.CreteDate=DateTime.Now;
//规则
var isUserDuplicated=repository.GetAll().Any(u=>u.Username==command.Username);
var isEmailDuplicated=repository.GetAll().Any(u=>u.Email==command.Email);
添加(用户);
Save();
}
}
  • 在哪里可以应用业务规则来检查用户名是否重复或电子邮件是否重复

  • 我的命令处理程序无效。那么,如何向用户发送复制通知呢


  • 电子邮件地址和用户名的唯一性并不是一个真正的域问题,所以它们可以通过简单的数据库约束或像您一样使用应用程序处理程序逻辑来实现。域模型应该为可能更改的规则和业务专家提到的规则保留

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