Какова стоимость исключительных фабрик? - PullRequest
6 голосов
/ 13 августа 2010

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

if(argument == null)
{
    throw Error.ArgumentNull("argument");
}

Пустые аргументы являются простейшим примером, другие типы исключений доступны через класс статической ошибки.

Какова стоимость этого фабричного образца? Почему бы не использовать оператор new и просто вызвать конструктор ArgumentNullException?

Ответы [ 3 ]

5 голосов
/ 13 августа 2010

Я думаю, что основная причина в том, что сообщения об исключениях .NET локализованы. Фактический текст сообщения должен быть получен из строкового ресурса. Лучше поместить код такого рода в одно место, чтобы никто не возился с именем строкового ресурса.

Идея использования фабрики, чтобы можно было настроить тип исключений, кажется мне менее чем полезной. Это может привести к поломке большого количества клиентского кода, который по какой-либо причине пытается перехватить это исключение. После того, как вы отправите код, который выдает конкретное исключение, вы в значительной степени застряли с ним. Выберите мудро:)

2 голосов
/ 13 августа 2010

Самая большая причина, которую я нашел, состоит в том, чтобы стандартизировать, как исключения обрабатываются и определяются в рамках конкретной команды разработчиков (или групп).Даже Microsoft публикует, что различные типы исключений не являются стандартными между Exception, SystemException и ApplicationException.Может случиться так, что потребности исключения могут отличаться в зависимости от правил, регулирующих конкретные логические случаи.Это также полезно для удаления общих задач (таких как ведение журнала) из повседневных забот разработчика.Все, что нужно сделать разработчику, это использовать соответствующее исключение на фабрике, а остальное позаботится фабрика.

0 голосов
/ 13 августа 2010

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

...