Мы боремся с политикой, чтобы правильно обрабатывать исключения в нашем приложении. Здесь наши цели для него (обобщены):
- Обработать только определенные исключения.
- Обработать только те исключения, которые вы можете исправить.
- Журнал только один раз.
Мы вышли с решением, которое включает в себя общее исключение приложения и работает как это в куске кода:
try {
// Do whatever
}
catch(ArgumentNullException ane)
{
// Handle, optinally log and continue
}
catch(AppSpecificException)
{
// Rethrow, don't log, don't do anything else
throw;
}
catch(Exception e)
{
// Log, encapsulate (so that it won't be logged again) and throw
Logger.Log("Really bad thing", e.Message, e);
throw new AppSpecificException(e)
}
Все исключения записываются в журнал, а затем переходят к исключению AppSpecificException, чтобы он не регистрировался снова. В конце концов он достигнет последнего обработчика событий, который будет иметь дело с ним, если это необходимо.
У меня не так много опыта с шаблонами обработки исключений... Является ли это хорошим способом решения наших задач? Имеются ли какие-либо серьезные недостатки или большие красные предупреждения?
Примечание.. Одним из недостатков этого является то, что после первого улова вы теряете способность обрабатывать конкретное исключение (если вы вызываете метод, который вызывает другой метод, а второй выдает исключение вы не можете справиться с этим), но я обнаружил, что никогда не делал этого... Я обрабатываю исключения только с одним уровнем глубины...