2015-07-02 7 views
1

Скажите, что у меня есть метод, который существует в библиотеке/фреймворке, я хочу знать, должны ли методы бросать исключения или сбой молча; например:Рамочный код: Исключить молчание или исключить исключения

void PerformAction(Item item) 
{ 
    // throws NullReferenceException if item is null 
    item.DoThis(); 
} 

void PerformAction(Item item) 
{ 
    //fails silently 
    if(item != null) 
    { 
     item.DoThis(); 
    } 
} 

Какое решение лучше - или это немного субъективный вопрос?

+3

Это было бы очень субъективно, хотя я считаю, что большинство голосов скажут, что вы должны в основном «бросать». По крайней мере, для целей отладки. Если в структуре есть механизм ведения журнала, вы должны зарегистрировать неудачную задачу, если вы не хотите бросать ее. –

ответ

1

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


Мне нравится эта простая аналогия; наивный, как это может быть, он делает четкий и правильный момент:

Босс: Эй Джо, не могли бы вы сделать мне одолжение и потекли к бухгалтерскому учету и доставить эти важные документы там для меня?
Joe: Несомненно, проблем нет.

Джо спускается к бухгалтерскому учету, но находит дверь заперта, и все на обед

Возможные последующие # 1:

Джо возвращается к своему боссу: К сожалению, офис был закрыт. Я могу попробовать позже, если вы захотите, или, возможно, у вас есть другой вариант для доставки документов?

Возможные последующие # 2:

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

Какой вариант вы предпочитаете, если бы вы были боссом?

3

Это «действительно» субъективный вопрос и зависит от случая.

Например, если этот api предоставляет некоторые операции над БД, и всякий раз, когда пользователь api хочет создать запись, игнорирование молча будет головной болью.

С другой стороны, если эта операция является необязательной, игнорирование не повредит. Например, разработчик api может захотеть сохранить количество операций, выполняемых с помощью этого api, используя веб-службу. В этом случае вы можете терпеть неудачу, если сервис недоступен, поскольку это не является целью api.

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

1

Я думаю, вы должны выбросить исключение. Если вы следуете за Principle of Least Astonishment (ПОЛА), то PerformAction должен выполнить действие. Поэтому, если элемент null, вы не можете выполнить действие, и вы ожидаете обратной связи.

Но, как уже было сказано, это очень субъективно.

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