2010-06-15 4 views
0

Я создал этот метод, ниже который делает HTTP-вызов сторонним API. Я просто хочу, чтобы мнения были, если я обрабатываю это наилучшим образом. Если вызов завершается с ошибкой, мне нужно вернуть значение bool ExistsInList только в том случае, если ответ не равен нулю. Но в последнем утверждении return, не нужно ли мне по существу делать другой возврат selectResponse == null? false: selectResponse.ExistsInList; сначала проверить нулевое значение, как предыдущее возвращение в catch?Обработка возвращаемого значения из веб-службы Call Wrapper

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

public static bool UserExistsInList(string email, string listID) 
{ 
    SelectRecipientRequest selectRequest = new SelectRecipientRequest(email, listID); 
    SelectRecipientResponse selectResponse = null; 

    try 
    { 
     selectResponse = (SelectRecipientResponse)selectRequest.SendRequest(); 
    } 
    catch (Exception) 
    { 
     return selectResponse == null ? false : selectResponse.ExistsInList; 
    } 

    return selectResponse.ExistsInList; 
} 

ответ

4

Предложение № 1: не есть исключения! Вы понятия не имеете, какие исключения вы игнорируете. Вы предполагаете, что любые исключения в этой точке подразумевают проблему с сторонним API, но это может быть не так.

Мое предложение состоит в том, чтобы хотя бы зарегистрировать исключение и , то игнорировать его. Обязательно посмотрите журнал во время разработки, чтобы вы могли видеть, какие исключения вы получаете. Посмотрите на код в обертке, чтобы понять, какие исключения вы можете разумно получить (точнее, какие из них означают, что произошло что-то разумное, например, сбой связи).

Затем измените этот код, чтобы поймать только исключения, которые подразумевают проблему с этим API. Остальным должно быть разрешено распространять, обрабатывать код, который знает, как обращаться с ними, или обрабатываться кодом, который будет правильно их записывать.

См. «Asked to fix bugs in a program, you find over 100 instances of…» на примере того, кто должен был очистить код таким образом.

+0

Да, любые исключения, которые не являются «throw;», должны быть зарегистрированы. – Nate

+0

ОК, но я не хочу останавливать все свое приложение здесь, если в этом случае получаю исключение, потому что мне все равно, если я получаю исключение здесь ... это не имеет значения для этого конкретного метода, зависящего от бизнес-логики/сценария – PositiveGuy

+0

Я согласен с вами и Нейтом ... спасибо, хорошее эмпирическое правило, чтобы помнить. Но мы не хотим регистрировать исключения, если мы не заботимся о них. Например, если этот второй вызов терпит неудачу, все в порядке, это просто означает, что они не находятся в списке подавления, и это нормально. Мы просто делаем быструю проверку, чтобы увидеть, есть ли там, и если да, сделайте небольшую очистку и удалите эту запись. Если он не существует или сбой SelectResponse, мы можем просто повторить попытку позже, но это не критично, если он терпит неудачу, потому что это просто проверка записи на их конце для целей очистки. Нам не нужно видеть тонну этих ошибок. – PositiveGuy

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