Является ли "охранный" метод исключения исключительной практикой?
Будет ли следующий код считаться "хорошей" практикой?
Это контроллер конечной точки RPC пакета. Идея состоит в том, чтобы легко переопределить / расширить проверку или авторизацию для конкретного проекта, включающего пакет.
Не могли бы вы сказать, что это защитные положения или методы? Является ли хорошей идеей иметь метод, единственной целью которого является проверка чего-либо и выдача исключения, если что-то пойдет не так?
Код выглядит мне чистым, но я бы хотел получить совет по этому вопросу:)
public function doSomethingWithCustomer() {
try {
$this->validate();
$this->authorize();
$customer = $this->resolveCustomer();
$customer->doSomething();
} catch (HttpException $e) {
$this->logger->error($e->getMessage());
return $this->errorResponse($e->getStatusCode(), $e->getMessage());
}
}
protected function validate()
{
// Validate input
if (!$valid) {
throw new BadRequestHttpException('Invalid email address');
}
}
protected function authorize()
{
// Do some authorization checking
if ($notAuthorized) {
throw new AccessDeniedHttpException('Not authorized');
}
}
protected function resolveCustomer()
{
$customer = Customer::load(1);
if (is_null($customer) {
throw new NotFoundHttpException('Customer not found');
}
return $customer;
}
1 ответ
Нет, это плохая практика по следующим причинам:
- Вы никогда не должны ловить исключение охранных предложений (это является частью методологии отказоустойчивости)
- Метод не может содержать только охранные предложения
- Пункты охраны не должны проверять бизнес-логику
Вот моя статья на страже. Я надеюсь, что это поможет вам лучше понять их.