Когда использовать утверждение над исключениями в классах домена - PullRequest
3 голосов
/ 05 января 2009

Существуют ли ситуации, когда вы используете утверждение вместо обработки исключений внутри классов домена ...

Ответы [ 3 ]

4 голосов
/ 05 января 2009

Используйте исключения для проверки параметров и других проверок, которые проверяют, что пользователи ваших классов используют их по назначению.

Используйте утверждения для внутренних проверок согласованности, т. Е. Чтобы указать вы облажались, а не пользователь вашего класса.

Таким образом, если пользователи вашего класса видят ошибку подтверждения, они знают, что это (вероятно) внутренняя ошибка в вашем коде, а не в использовании вашего кода. С другой стороны, если исключение проверки параметров get, они знают, что это их ошибка.

3 голосов
/ 05 января 2009

Никогда. Утверждения не являются допустимой формой обработки ошибок. Используйте их, чтобы помочь в выявлении программных ошибок во время тестирования.

1 голос
/ 06 января 2009

Утверждение отражает состояние, которое никогда не должно происходить и не ожидалось, когда приложение не может продолжить выполнение по той или иной причине, тогда как исключение указывает состояние, которое не считается «нормальным», но не было неожиданным, и из которого можно было бы восстановить.

Например, если я выделю пространство в куче, и это распределение завершится неудачно, я не смогу продолжить работу, поэтому я утверждаю, что возвращенный адрес действителен; где оно недопустимо, утверждение не выполняется, и программа завершается с ним ошибкой.

С другой стороны, если я открою файл для чтения, а он не существует, то можно будет исправить ситуацию, в этом случае возникает исключение (и перехватывается, и обрабатывается до тех пор, пока возможно).

Как правило, утверждения наиболее полезны на этапе отладки, тогда как исключения считаются частью обычной программы и обработки ошибок. Общее мнение состоит в том, что утверждения должны быть отключены в производственном коде (чтобы защитить пользователей от явных сбоев), тогда как я прочитал научную мысль, которая утверждает, что это контрпродуктивно, и что пользователь должен увидеть сбой утверждения, чтобы они может правильно сообщить о проблеме.

Лично я иногда комбинирую эти две техники; обычно, если я ловлю исключение, которое я не верю, может быть брошено. В приведенном выше примере, если я проверяю существование файла перед попыткой его открыть, то не ожидаю, что будет сгенерировано исключение, а если оно есть, то я склонен иметь дело с этим, поднимая утверждение в соответствующем блоке catch. Я считаю этот метод особенно полезным в Java, где такие исключения полностью проверяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...