在 ddd 中正确使用命令处理程序

Right use about command handlers in ddd

我正在 DDD 中创建应用程序。我想知道两件事:

1- 在 RegisterUserHandler 中创建值对象(id、电子邮件、密码)是否正确?或者我必须创建一个特定的 class 才能做到这一点?

2-创建一个简单的实体创建工厂是必要的。我使用 userfactory 创建用户,但我可以直接输入下一行:“$ user = User :: register ($ id, $ email, $ password);”在 RegisterUserHandler 中删除 userFactory?

//class RegisterUserHandler
public function handle(CommandInterface $command)
{
    $id = Id::create();
    $email = Email::create($command->email());
    $password = Password::create($command->password());

    $this->userFactory->create($id, $email, $password);
}


//class userfactory
public function create(Id $id, Email $email, Password $password)
{
    $user = User::register($id, $email, $password);
    return $user;

}

如果创建与构造函数调用一样简单,则您不必使用工厂来创建 value objectentities。适用于这种情况的原则是KISS.

如果进程包含一些 算法,那么您可以将其提取到工厂中以将责任转移到别处。