В последнее время встречаю много критики по поводу данного подхода, но все же насколько правильно заложить исключительные ситуации для метода сервиса бизнес логики через вариации Exceptions
try{
$order = $orderService->createOrderAndNotify($orderRequest);
return $this->view("success",[
"orderId" => $order->getId()
]);
}
catch(OrderValidationException $ex){
$logger->warning("error valid order", $ex->getErrors());
return $this->view("warning",[
"errors" => $ex->getErrors()
]);
}
catch(OrderException $ex){
$logger->error($ex->getMessage());
return $this->view("error");
}
иерархия исключений Order\Exceptions
OrderException extends RuntimeException
OrderValidationException extends OrderException
OrderNotFound extends OrderException
вижу приемущества:
1. конкретный ответ метода, а не какой то специализированный DTO отдающий все на свете
2. обработка исключений в зависимости от ситуации и логики приложения
3. тестируемость и документированность (phpunit,docblock)
4. передача доп. данных в исключениях