Детали при строительстве Exception - PullRequest
1 голос
/ 04 марта 2011

Какие технические подробности лежат в основе создания и использования правильно настраиваемых исключений?

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

Я знаю всевозможную информацию о том, почему что-то исключительное, прекрасно для начала, но какие уловки вы держите в своих рукавах?

А также: когда создавать пользовательские исключения?

Я хотел бы получить представление о всех языках, но сейчас использую c #.

Спасибо!

1 Ответ

1 голос
/ 04 марта 2011

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

1) Разница в имени - это только первое преимущество: оно сразу говорит вам, что это один из методов в ВАШЕМ пакете, который потерпел неудачу (в отличие от десятков сторонних библиотек, которые вы будете использовать вкрупные проекты, которые, мы надеемся, также генерируют настроенные исключения, а не стандартные).

2) Еще лучше: вы можете добавлять информацию в поля MyFileError-objects: вы можете хранить строку, которая сообщает вам , которая файл, который пытался загрузить метод.

Это только очень простой пример;Подумайте об этом более развитом: вы строите банковскую систему (онлайн-банкинг или b2b).Вместо SocketError у вас есть настроенный TransactionError, в котором есть поле, в котором хранится информация о том, какая часть транзакции завершилась неудачей. В качестве примера можно привести «before-authentication» и «financialTransactionNonZero», первое из которых будет безвредным, и вы можете просто сделать системуавтоматически повторите попытку пару раз, а затем предложите пользователю проверить свою сеть;второй, однако, будет критической частью денежной транзакции: деньги были вычтены из счета владельца, но еще не назначены лицу, которому он хотел отправить деньги;в этом случае ваша система более высокого уровня должна выполнить откат (на стороне сервера) и сообщение об ошибке (на стороне клиента).

Нет ничего хуже, чем иметь такую ​​подробную информацию на более низких уровнях, но затем использовать улов (Исключение) {System.out.println («произошла ошибка»);} на верхних уровнях.

...