2017-09-22 60 views
1

我正在DDD中创建应用程序。我想知道两件事:正确使用关于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

你不necesarily需要使用一个工厂来创建value object S或entities如果创建一个构造函数调用一样简单。在这种情况下适用的原则是KISS

如果该过程包含某些算法,那么您可以将它提取到工厂中以将责任移到别处。