2017-09-22 57 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

如果該過程包含某些算法,那麼您可以將它提取到工廠中以將責任移到別處。