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

时间:2017-09-22 19:00:43

标签: command domain-driven-design factory

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

1-在RegisterUserHandler中创建值对象(id,email,password)是否正确?或者我必须创建一个特定的类来制作它?

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;

}

1 个答案:

答案 0 :(得分:1)

如果创建与构造函数调用一样简单,那么您根本不需要使用工厂来创建value objectentities。在这种情况下适用的原则是KISS

如果该过程包含某些算法,那么您可以将其提取到工厂中以将责任转移到其他地方。