Penso che questa sia più di una domanda generale (quindi non limitata al php) per quanto riguarda ddd e lo schema di comando.Schema di comando nelle applicazioni php: come gestire le azioni del controller?
Diciamo che eseguo CreatePostCommand dall'azione di creazione del mio controller, il comando verrà gestito ed eventualmente eseguito correttamente. Qual è il modo appropriato per notificare al controller quale risposta restituire nel caso in cui il comando abbia avuto esito negativo o negativo? Dato che il gestore di comandi attiverà un evento specifico del dominio, potrei collegare il controller all'evento, ma ciò sembra abbastanza difficile, anche non appropriato per ogni situazione (ad esempio un post potrebbe essere creato da qualche altra parte e il controller in realtà non lo fa sapere di questo :)).
public function createAction($title, $content)
{
$this->commandBus->execute(new CreatePostCommand($title, $content);
$this->render('…'); // what if the command execution failed?
}
Qualche idea su questo?
Se l'esecuzione non è riuscita, sarebbe stata generata un'eccezione, ovvero la riga che hai commentato non sarebbe stata eseguita. –
Sì sicuro. Avrei dovuto essere più specifico qui.Diciamo che il comando è stato eseguito con successo e voglio reindirizzare a/post/edit/{$ id}, il controller non sarebbe a conoscenza dell'id post a meno che entrambi, il controller e il gestore comandi condividano per es. il repository dei post. Questo ha più senso. – iwyg
La restituzione di valori da un comando interromperà il modello. Quindi sì, sei corretto nel fatto che sia il controller che il gestore di comandi dovranno conoscere il repository. Ma se hai bisogno di avere qualcosa che ritorna da un comando, dai un'occhiata al pattern del functor. –