Некоторое время я размышлял над этой проблемой и постоянно нахожу предостережения и противоречия, поэтому надеюсь, что кто-нибудь сможет сделать вывод о следующем:
Избранные исключения по кодам ошибок
Насколько мне известно, после четырех лет работы в отрасли, чтения книг, блогов и т. Д. В настоящее время наилучшей практикой для обработки ошибок является создание исключений, а не возвращение кодов ошибок (не обязательно код ошибки, но тип, представляющий ошибку).
Но - мне кажется, это противоречит ...
Кодирование к интерфейсам, а не реализации
Мы кодируем интерфейсы или абстракции, чтобы уменьшить связь. Мы не знаем или не хотим знать конкретный тип и реализацию интерфейса. Так как же мы можем знать, какие исключения мы должны искать? Реализация может выдать 10 разных исключений или не выдать ни одного. Когда мы ловим исключение, конечно, мы делаем предположения о реализации?
Если только - интерфейс имеет ...
Спецификации исключений
Некоторые языки позволяют разработчикам утверждать, что определенные методы генерируют определенные исключения (например, Java использует throws
ключевое слово.) С точки зрения вызывающего кода это выглядит хорошо - мы точно знаем, какие исключения нам может понадобиться перехватить.
Но - это, кажется, предполагает ...
Утечка абстракции
Почему интерфейс должен указывать, какие исключения могут быть выданы? Что, если реализация не должна вызывать исключение или должна генерировать другие исключения? На уровне интерфейса нет способа узнать, какие исключения реализация может захотеть выдать.
Так...
Заключить
Почему исключения предпочтительны, когда они (на мой взгляд) противоречат лучшим практикам программного обеспечения? И, если коды ошибок настолько плохи (и мне не нужно продаваться с пороками кодов ошибок), есть ли другая альтернатива? Каково текущее (или скорое) состояние в области обработки ошибок, которое соответствует требованиям передового опыта, изложенным выше, но не зависит от вызова кода, проверяющего возвращаемое значение кодов ошибок?