Парадигма работы с исключениями
От: 0K Ниоткуда  
Дата: 12.08.10 01:29
Оценка:
Начал думать над стратегией обработки исключений.

Все исключения возникают по одной из трех причин:

1. Некорректности во внешних данных (внешних сервисов или вводимых пользователем).
Примеры: пользователь ввел вместо числа -- символ.

2. Ошибки в коде программы (кривой код).
Примеры: вышли за границу массива, обратились к защищенной памяти, вызвали из другого потока к потоконебезопасный метод.

3. Ошибки системы.
Примеры: недостаточно памяти, аварийное завершение процесса, переполнен стек, недостаточно места на диске, обрыв соединения, нет связи с базой данных.

4. Ошибки прав доступа. -- под вопросом, не знаю куда отнести


Это очень важно. Хотя в .Net (и не только) на причину внимания не обращают.

По идее должно быть 3 базовых класса для всех исключений. Программист смог бы генерировать только исключения "некорректности данных". Системные исключения генерируются Операционной Системой. А исключения "кривого кода" средой исполнения.

Тогда бы все было намного яснее. Если возникло исключени #3 (системное) -- то как правило с ним ничего сделать нельзя -- только показать пользователю, отобразить информацию. Если исключение #2 (кривой код) -- то программист должен исправить ошибку в своей программе. Ну и если #1 -- неверные данные -- то либо пользователь должнен вводить данные правильно (для пользователя эти исключения нужно обрамлять в красивые сообщения об ошибках) либо сообщить в тех. поддержку сервиса, что они выдают ошибочные данные (либо перестроить логику обработки этих данных).

Кстати, ошибки #2 могут породить ошибки #3. И, вроде бы все -- остальные никак не связаны.

Что вы думаете о такой структуризации? И куда отнести ошибки прав доступа? Какие еще есть типы ошибок, которые не вписываются в данную парадигму?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.