Я должен согласиться с утверждением, что «блок обработки исключений решает проблемы, которых на практике не существует». Я использовал блок с момента его выпуска, и я редко чувствую, что на самом деле я получаю много пользы от него. Ну, возможно, немного головной боли. :)
Перед тем как начать, я признаю, что мне нравится функциональность Защита от исключений на границах обслуживания WCF . Тем не менее, это было добавлено сравнительно недавно, не требует кодирования - только атрибуты и конфигурация, а не то, как обычно продается блок. Вот как Microsoft показывает это на http://msdn.microsoft.com/en-us/library/cc309250.aspx
На мой взгляд, вышесказанное - контроль потока.
try
{
// Run code.
}
catch(DataAccessException ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy");
if (rethrow)
{
throw;
}
}
Когда вы комбинируете аспект управления потоком с кодом выше, вы определенно не заставляете неправильный код выглядеть неправильно . (Не берите в голову, что конструкция if (rethrow) не предлагает много абстракций.) Это может усложнить обслуживание для разработчиков, не знакомых с определениями политики. Если postHandlingAction
в файле конфигурации изменяется (это, вероятно, произойдет в какой-то момент), вы, вероятно, обнаружите, что приложение ведет себя неожиданным образом, который никогда не тестировался.
Возможно, я бы не счел это нежелательным, если бы блок не обрабатывал управление потоком, а просто позволял вам связывать обработчики вместе.
Но, возможно, нет. Я не помню, чтобы меня когда-либо просили:
- добавить новую функциональность при обработке исключения (например, помимо регистрации в журнале событий также отправьте электронное письмо. На самом деле, блок регистрации может сделать это самостоятельно, если вы уже регистрировали исключение самостоятельно. :) )
- изменить поведение обработки исключений (глотать, перебрасывать или создавать новые) во всей «политике».
Я не говорю, что этого не происходит (я уверен, что у кого-то есть история!); Я просто чувствую, что блок приложения обработки исключений затрудняет понимание и сопровождение программ, и это обычно перевешивает функциональность, предоставляемую блоком.