2017-09-15 56 views
0

我有一個場景,我通常檢索一個對象,我們稱之爲UserRights。 如果一切正常,則填充對象。 但如果出現問題,我想知道出了什麼問題,爲什麼。通常我會拋出異常,但由於各種原因,我不能拋出異常。在不拋出異常的情況下拉對象時返回錯誤數據?

我想添加兩個字段到返回對象,ErrorCode(int)和ErrorReason(字符串)。 如果Errorcode == 0,那麼一切都很好,對象被填充。但如果它不是0,那麼出現了問題,我需要查看ErrorReason以查明原因。

我能看到的最大問題就是我必須更新每一個對象,並且要調用這些額外的字段。

有沒有其他可能的方式更好地返回錯誤數據呢?

+0

「我能看到的最大問題是,我必須更新每一個對象,並且這是爲了迎合這些額外的領域。」 - 你會付出多少努力?爲什麼? – Fildor

回答

0

我不知道你的應用程序架構,所以很難說肯定,但你有一些選擇;

選項1

定義一個基類,然後所有的其他類可以從這個繼承;

public class MyBase { 
    public int ErrorCode { get; set; } 
    public string ErrorMessage { get; set; } 

    public MyBase() 
    { 
     ErrorCode = 0; 
     ErrorMessage = null; // or ""; 
    } 
} 

然後,您將努力限制爲只需要更新這些如果您有錯誤。

但是您必須更新所有其他類以從中繼承。 (一個痛苦,如果你有很多,那麼你可以使用下面的選項2)

選項2

如果你只在你返回你的結果幾個地方,那麼你就可以在你面前修改您迴應發送。

定義與上面相同的類,但包含用於響應的額外屬性。如此;

public object MyResponse { get; set; } 

然後,當你返回你的結果時創建這個類的一個實例。如果您有錯誤更新它們並將MyResponse保留爲空。 否則,將您的正常響應對象放在MyResponse中並將其返回。

選項3

定義同一個班以上,但不繼承它。 更改您的響應,以便返回一個通用對象。

當你返回你的對象時,返回正確的對象或者在出錯的情況下只返回Error對象。

然後你的接收函數需要確定返回的類的類型並處理它。

選項4

你可能有單獨的錯誤報告。
當你有錯誤時,你只需要一個參考號碼,並在其他地方記錄你的錯誤。

接收器獲取該參考號而不是結果,然後查找以確定實際的錯誤是什麼。

+1

選項1聽起來不錯。由於我仍然必須創建這些具有默認「成功」選項的類,實際上可以縮短我的開發時間,所以我只需要解決問題。 – KizilKar

相關問題