2011-01-08 2 views
0

Какая из них - хорошая комбинация с попытками поймать слои пользовательского интерфейса и хорошая практика применения n-уровня и почему?Практика в использовании try-catch-finally

1.

try 
    { 
    //Statements 
    } 
    catch 
    { 
     throw 
    } 
    finally 
    { 
    //cleanup codes 
    } 

ИЛИ

2.

try 
    { 
     // statements 
    } 
    catch(Exception ex) 
    { 
    } 
    finally 
    { 
    // clean up 
    } 

и в слое UI

try{ 
} 
catch(Exception ex) 
{ 
Log(ex); 
} 
finally 
{ 
    //clean up 
} 
+2

Возможный дубликат [Куда поместить попытку поймать] (http://stackoverflow.com/questions/523875/where-to-put-try-catch) – slugster

+1

Также рассматривается здесь: [Как и где мы пишем try catch блок для обработки Exception] (http://stackoverflow.com/questions/2430823/how-and-where-do-we-write-try-catch-block-to-handle-exception). Это были только два вопроса, которые я выбрал из панели * Related questions * справа, даже не выполнив поиск. – slugster

+0

Независимо от того, что вы делаете там, где говорится «очистить», возможно, это означает, что все это должно заменяться оператором 'using'. –

ответ

2

В первой, catch и throw совершенно бессмысленно, вы должны просто использовать try и finally, если вы хотите, чтобы обеспечить очистку.

Второй опасен и никогда не должен использоваться. Код не должен содержать catch, который проглатывает каждое исключение и просто игнорирует его без объяснения. В редком случае, когда вам нужно поймать исключение и проигнорировать его, вы должны попытаться ограничить его конкретным типом исключения и всегда должны включать комментарий в код, объясняющий, почему исключение игнорируется.

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

1

Общей практикой является использование попытка/наконец (или использование заявления) в бизнесе/службе e, чтобы обеспечить правильную очистку ресурсов.

На границе физического уровня вы могли бы хотеть длинные исключения, так что вы можете иметь что-то вроде следующего:

try 
{ 
} 
catch(Exception ex) 
{ 
    ... log exception 
    throw; 
} 

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

Смежные вопросы