Пара вопросов об исключениях / управлении потоками и применении пользовательских исключений - PullRequest
2 голосов
/ 09 апреля 2010

1) Пользовательские исключения могут помочь прояснить ваши намерения.

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

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

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

if (exceptionVariable != null)
{

}

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

1 Ответ

1 голос
/ 09 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...