2010-06-15 53 views
0

我在下面創建了此方法,該方法對第三方API進行HTTP調用。我只想就我是否以最好的方式處理這個問題發表意見。如果調用失敗,則只有在響應不爲空時,我才需要返回ExistsInList布爾值。但在最後一個return語句中,我不必基本上做另一個返回selectResponse == null嗎? false:selectResponse.ExistsInList;首先檢查null,就像之前的catch返回一樣?處理來自Web Service Call Wrapper的返回值

剛纔似乎多餘的方式我接近這一點,我不知道我是否真的需要在最終的回報中再次檢查null,但我認爲是的,因爲你不能總是依靠響應給予即使沒有發現錯誤,您也可以獲得有效的答覆。

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;'en的異常都必須記錄下來。 – Nate 2010-06-15 20:29:00

+0

好的,但我不想在這裏停止我的整個應用程序,如果我在這種情況下得到一個異常,因爲我不在乎這裏是否有異常...這對於這種依賴於業務邏輯/場景的特定方法是無關緊要的 – PositiveGuy 2010-06-15 20:50:42

+0

我同意你和Nate的看法......謝謝你,經驗值得記住。但是如果我們不關心它們,我們不想記錄異常。例如,如果第二次呼叫失敗,那沒關係,這只是意味着它們不在禁止列表中,這很好。我們只是做一個快速檢查,看看是否有人在那裏,如果是這樣做一點清理並刪除該記錄。如果它不存在或者SelectResponse失敗,我們可以稍後重試,但如果失敗則不是關鍵,因爲它僅僅是爲了清理目的而對它們的記錄進行檢查。我們不需要看到大量的錯誤。 – PositiveGuy 2010-06-15 20:52:37