Myślę, że jest to raczej ogólne pytanie (więc nie php ograniczone) w odniesieniu do ddd i wzorca polecenia.Schemat poleceń w aplikacjach php: jak radzić sobie z działaniami kontrolera?
Załóżmy, że wykonuję CreatePostCommand z poziomu działania create mojego kontrolera, polecenie zostanie obsłużone i ostatecznie zostanie pomyślnie wykonane. Jaki jest właściwy sposób powiadomienia kontrolera, która odpowiedź ma zostać zwrócona w przypadku niepowodzenia lub sukcesu polecenia? Biorąc pod uwagę, że obsługa komend uruchomi zdarzenie związane z daną domeną, mógłbym podłączyć kontroler do zdarzenia, ale to wydaje się dość kłopotliwe, również nieodpowiednie w każdej sytuacji (np. Post mógł zostać utworzony gdzieś indziej, a kontroler naprawdę nie o tym wiedz :)).
public function createAction($title, $content)
{
$this->commandBus->execute(new CreatePostCommand($title, $content);
$this->render('…'); // what if the command execution failed?
}
Jakieś przemyślenia na ten temat?
Jeśli wykonanie nie powiedzie się, zostanie zgłoszony wyjątek, co oznacza, że linia, którą skomentowałeś, nie zostałaby uruchomiona. –
Tak, na pewno. Powinienem być bardziej konkretny tutaj.Powiedzmy, że wykonanie polecenia powiodło się i chcę przekierować do/post/edit/{$ id}, kontroler nie byłby świadomy tego posta, chyba że zarówno kontroler, jak i kontroler akcji udostępnią np. repozytorium wpisów. Czy to ma więcej sensu. – iwyg
Powracanie wartości z polecenia spowoduje przerwanie wzorca. Więc tak, masz rację, że zarówno kontroler, jak i obsługa dowodzenia będą musieli wiedzieć o repozytorium. Ale jeśli potrzebujesz czegoś, co powróci z polecenia, spójrz na wzór funktora. –