這個標題乞求更多的解釋。您想如何暴露錯誤處理的API?
基本上,我正在推出一個API,將一個Web服務包裝在一個好的角色模型中。此模型公開以下形式:
var obj = MyRemoteResource.GetForId(1234, SourceEnum.ThatSource);
ApiConsumerMethod(obj.SomeProperty); //SomeProperty is lazily loaded, and often exposes such lazily loaded properties itself
... etc ...
RemoteResources *(每個RemoteResources都有多個不同的屬性)。有真正積極的緩存進行,並要求限制,以防止無意DOS服務器(並取消呼叫者的IP被禁止)。
我已經有了所有這些代碼的工作,但我目前在處理錯誤方面做得並不多。基本上,如果API的使用者提供了無效的ID,Web服務器關閉,連接超時或發生大量請求層錯誤,則在訪問屬性時會發生異常。
我認爲這遠遠不夠理想。
所以我的問題是,我應該如何包裝這些錯誤,以便這個API的用戶來管理它們呢?
一些路線我已經考慮:
- 只是包裝在一些API上定義的所有異常,並且拋出記錄它們。
- 公開靜態
ErrorHandler
類,該類允許用戶爲特定錯誤註冊通知回調;如果沒有針對特定錯誤進行註冊,則會回到上述行爲。** - 錯誤時爲null,並設置
LastErrorCode
。
這些方法都有優點和缺點。我會欣賞他們的意見,以及我沒有想到的替代方案。
如果它影響討論的話,拋出這些例外的平臺類是WebClient。此外,WebClient
的使用足夠抽象,如果需要,可以很容易地用其他一些下載方案替換。
*這就是說,許多不同種類的
**這將是...奇怪。但它映射到失敗的全球性。這是迄今爲止我最不喜歡的想法。
這比我的回答好得多:o) – hhravn 2009-12-10 07:53:41
該API的延遲加載特性使得很難確定id是否有效。一個完全有效的用例是從ID(例如緩存在一個文件中)構造一大組項目,然後遍歷一組屬性。只有訪問了一個屬性,ID的有效性才能確定。 – 2009-12-10 08:40:28