Я бы предположил, что использование исключений, как описано в вопросе (для управления потоком внутри функции), является неправильным , как правило, не лучшая идея. Я бы пошел дальше и сказал, что проверка , выбрасывание исключений - не лучший подход; вместо этого верните логическое значение и сохраните список сообщений об ошибках валидации, к которым можно получить доступ. Сопутствующий метод сохранения может / должен вызвать исключение, если он вызывается для недопустимого объекта.
Таким образом, если валидация не пройдена, пользователю могут отображаться сообщения об ошибках валидации (зарегистрировано, возвращено. Что угодно). Если проверка прошла успешно, вы можете позвонить сохранить.
Если вы вызываете save для недопустимого объекта, тогда получите соответствующее исключение.
Другая потенциальная проблема с вашим примером кода (в зависимости от требований, конечно) заключается в том, что он генерирует только первую ошибку проверки. Представьте себе это от пользователя POV:
- Нажмите сохранить
- Получить сообщение об ошибке
- Исправить ошибку
- Нажмите сохранить еще раз
- Получить другое сообщение об ошибке. раздражающий.
Как пользователь, я бы предпочел, чтобы все ошибки валидации возвращались сразу, чтобы я мог их исправить, прежде чем пытаться снова.