2010-04-08 2 views
2

1) Пользовательские исключения могут помочь сделать ваши намерения ясными.Несколько вопросов об исключениях/управлении потоком и применении пользовательских исключений

Как это может быть? Цель состоит в том, чтобы обрабатывать или регистрировать исключение, независимо от того, является ли этот тип встроенным или обычным.

Основная причина, по которой я использую пользовательские исключения, - не использовать один тип исключения для решения одной и той же проблемы в разных контекстах (например, параметр имеет значение null в системном коде, который может влиять на внешний фактор и пустую корзину покупок). Тем не менее, разделение между кодом системы и бизнес-домена и использование разных типов исключений кажется очень очевидным и не делает большинство пользовательских исключений. В связи с этим, если пользовательские исключения охватывают исключения для бизнеса, я мог бы также получить все места, которые являются источниками исключений на уровне бизнес-домена, используя «Найти все ссылки». Стоит ли добавлять исключения, если вы проверяете аргументы метода как null, используете их несколько раз, а затем добавляете catch? Является ли реалистичный риск того, что внешний фактор или какая-либо другая причина уродства может привести к тому, что аргумент будет равен нулю после проверки?

2) Что означает, когда исключения не должны использоваться для управления потоком программ и почему бы и нет? Я предполагаю, что это походит на:

if (exceptionVariable != null) 
{ 

} 

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

ответ

1

Я не уверен, я понимаю вашу первую точку, но второй один означает, что вы не должны использовать исключения для написания кода, как это:

try { 
    if (something) { 
     stuff(); 
     if (something else) { 
      throw 1; 
     } 
     more_stuff(); 
    } 
} 
catch(...) { 
    yet_more_stuff(); 
} 

, где вы просто использовать механизм исключений в качестве своего рода из goto. Что касается того, почему не делать этого, у нас есть gotos, которые намного эффективнее и понятнее, чем исключения.

+1

@dotnetdev Вероятно, не рекомендуется принимать до того, как у других была возможность ответить, особенно потому, что я только обратился к половине вопроса. – 2010-04-08 22:54:10

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