我在寫一個返回不同類型的錯誤的Web服務。
每種方法都可以返回三種基本類型的錯誤之一:
General
,InvalidInput
或Non
。
除了這三個可能的值,每個方法可以有它自己的錯誤(例如進行登錄方法 - InvalidPassword) - 但每種方法只能返回一個錯誤。
因此,例如SignIn方法將能夠返回以下錯誤類型之一:General,InvalidInput,Non,InvalidPassword。
起初我以爲用枚舉,但我現在認爲,錯誤類型應該實現繼承,因爲有三個基本類型,每個新方法的錯誤類型從繼承。但我真的不能想象如何。我想用一個靜態類的 - 但隨後將只有一個字符串的靜態字段 - 和繼承是無關緊要的一次...
使用枚舉的另一個問題是,什麼樣的Web服務的客戶將得到最終是一個毫無意義的INT(通過JSON )什麼是一個枚舉的好替代品?
所以我的問題是:什麼是傳達的想法,有三種基本的可能值的一個很好的方式,你可以添加到這些,使一個新類型的錯誤?
我真的畢業了,不能跟你的人爭論,但恕我直言,這不是一個很好的解決方案 - 例外往往掩蓋真正的問題。我希望我的代碼能夠優雅地達到返回語句,即使它只是爲了宣佈一路上出錯了。我確信我可以找到一個着名的專業程序員的博客帖子說... ..這裏是 - http: //www.joelonsoftware.com/items/2003/10/13.html。還是我沒有得到你? – 2010-09-29 22:06:49
@Oren A:我不會說喬爾一般就在這裏,但我相信他只是指Eric Lippert在他的[博客文章]中稱之爲令人煩惱的例外*的異常(http://blogs.msdn的.com/b/ericlippert /存檔/ 2008/09/10 /傷腦筋-exceptions.aspx)。 – 2010-09-29 22:15:04
@ 0xA3,我認爲OP在這個特殊用例中可能有一點意義。我想我們都可以同意普通的C#異常是SoapExceptions的正確類比。我認爲SignIn方法實際上返回SignIn的結果是合理的 - 它不會返回任何其他內容。無效的用戶名實際上不是*例外*。國際海事組織,我只使用異常時,代碼中有**錯誤**不是由於用戶輸入無效。 – 2010-09-29 22:19:45