Sono relativamente nuovo ai concetti di progettazione basati su domini e ho riscontrato un problema con la restituzione di risposte appropriate in un'API durante l'utilizzo di un bus di comando con comandi e gestori di comandi per la logica del dominio.Come recuperare i dati da un bus di comando?
Diciamo che stiamo costruendo un'applicazione con un approccio di progettazione basato sul dominio. Abbiamo una parte posteriore e una parte anteriore. Il back-end ha tutta la nostra logica di dominio con un'API esposta. Il front-end utilizza l'API per effettuare richieste all'applicazione.
Stiamo costruendo la nostra logica di dominio con comandi e gestori di comandi mappati su un bus di comando. Sotto la nostra directory Dominio abbiamo un comando per creare una risorsa post chiamata CreatePostCommand. È mappato al gestore CreatePostCommandHandler tramite il bus di comando.
final class CreatePostCommand
{
private $title;
private $content;
public function __construct(string $title, string $content)
{
$this->title = $title;
$this->content= $content;
}
public function getTitle() : string
{
return $this->title;
}
public function getContent() : string
{
return $this->content;
}
}
final class CreatePostCommandHandler
{
private $postRepository;
public function __construct(PostRepository $postRepository)
{
$this->postRepository = $postRepository;
}
public function handle(Command $command)
{
$post = new Post($command->getTitle(), $command->getContent());
$this->postRepository->save($post);
}
}
Nella nostra API abbiamo un endpoint per la creazione di un post. Questo è instradato il metodo createPost in un PostController nella nostra directory dell'applicazione.
final class PostController
{
private $commandBus;
public function __construct(CommandBus $commandBus)
{
$this->commandBus = $commandBus;
}
public function createPost($req, $resp)
{
$command = new CreatePostCommand($command->getTitle(), $command->getContent());
$this->commandBus->handle($command);
// How do we get the data of our newly created post to the response here?
return $resp;
}
}
Ora, nel nostro metodo createPost vogliamo restituire i dati della nostra nuova funzione nel nostro oggetto risposta così la nostra applicazione front-end può conoscere la risorsa appena creata. Ciò è problematico poiché sappiamo che per definizione il bus di comando non dovrebbe restituire alcun dato. Così ora siamo bloccati in una posizione confusa in cui non sappiamo come aggiungere il nostro nuovo post all'oggetto risposta.
Non sono sicuro di come procedere con questo problema da qui, alcune domande mi vengono in mente:
- C'è un modo elegante per restituire i dati di un articolo, nella risposta?
- Sto implementando erroneamente il modello Command/CommandHandler/CommandBus?
- Si tratta semplicemente del caso di utilizzo errato per il modello Command/CommandHandler/CommandBus?
Possibile duplicato di [Cosa deve essere restituito dall'API per i comandi CQRS?] (Http://stackoverflow.com/questions/29916468/what-should-be-returned-from-the-api-for-cqrs- comandi) – guillaume31