Ich denke, das ist eher eine allgemeine Frage (also nicht php eingeschränkt) in Bezug auf ddd und das Befehlsmuster.Befehlsmuster in PHP-Anwendungen: Wie gehen Sie mit Controller-Aktionen um?
Angenommen, ich führe CreatePostCommand aus der create-Aktion meines Controllers aus, der Befehl wird verarbeitet und schließlich erfolgreich ausgeführt. Was ist der geeignete Weg, um dem Controller mitzuteilen, welche Antwort auf die Rückgabe für den Fall, dass der Befehl fehlgeschlagen oder erfolgreich war? Wenn der Command-Handler ein domänenspezifisches Ereignis auslöst, könnte ich den Controller mit dem Event verbinden, aber das erscheint ziemlich umständlich, auch nicht für jede Situation geeignet (zB könnte ein Post irgendwo anders erstellt werden und der Controller nicht weiß darüber :)).
public function createAction($title, $content)
{
$this->commandBus->execute(new CreatePostCommand($title, $content);
$this->render('…'); // what if the command execution failed?
}
Irgendwelche Gedanken dazu?
Wenn die Ausführung fehlschlug, wurde eine Ausnahme ausgelöst, was bedeutet, dass die von Ihnen kommentierte Zeile nicht ausgeführt wurde. –
Ja sicher. Ich hätte hier genauer sein sollen.Nehmen wir an, der Befehl wurde erfolgreich ausgeführt, und ich möchte zu/post/edit/{$ id} umleiten. Der Controller würde die Post-ID nicht kennen, es sei denn, sowohl der Controller als auch der Befehlshandler teilen z. das Post-Repository. Macht das mehr Sinn? – iwyg
Das Zurückgeben von Werten aus einem Befehl unterbricht das Muster. Sie haben also Recht, dass sowohl der Controller als auch der Command-Handler über das Repo Bescheid wissen müssen. Aber wenn Sie etwas von einem Befehl zurückgeben müssen, werfen Sie einen Blick auf das Funktor-Muster. –