2013-02-10 56 views
0

我想構建一個應用程序,處理大量的API請求2或3相關的API。我一般的策略是有一個基類ApiRequest有:使用繼承作爲包裝API調用

List<Parameter> Parameters 
Uri CombinedUri 
string Results 
string _Host 

和方法:

CombineUri() //combines the _Host and parameters into full Uri 
MakeRequest() //makes the request and stores Results 

然後我會繼承基類成許多不同的API調用,並在這些特定於實現的功能Api調用。

我遇到的問題是我在我的基類構造函數中調用了CombineUri(),但它要求已經設置了_Host。但是,我想_Host是每個子類中的常量,因爲它針對每個不同的Api調用都是特定的。我不想記得從每個派生類的構造函數調用CombineUri

任何想法來解決這個問題將不勝感激。另外,如果你有一個完全不同的設計思路來完成Api調用的基礎,那麼我會全神貫注。我不確定我的方法是否最好。

謝謝。

我的解決方案:

我實現了從約翰·柯林梨都的想法。 我將基數ApiRequest更改爲抽象類,並將CombineUri()方法移至MakeRequest()方法中。

我還走了一步,將ApiRequest更改爲通用類,並將_Host更改爲static string。這樣,每個子類的子類都是ApiRequest<*subclassname*>。由於泛型的屬性,特定子類的每個對象將共享一個靜態的_Host

+0

只需將您想要的特定主機傳遞給超類的構造函數即可。 – 2013-02-10 03:06:56

+0

我希望避免這種情況,因爲我是從每個單獨的Api調用的基類派生出來的,並且覺得將這些常量Api主機字符串放在其他代碼中會很奇怪。思考? – forTruce 2013-02-10 03:12:15

+0

我想你可能想要抽象基類。 – 2013-02-10 03:18:02

回答

2

如何使CombineUri()私有,然後在MakeRequest()的實現中調用它。

這個類的用戶不需要知道他們需要調用兩個方法,而且他們必須在調用MakeRequest之前調用CombineUri。這是MakeRequest中的一個實現細節。

可能我沒有完全理解這些類,但是如果我這樣做了,那麼我會使CombineUri變成私人的,並且始終將它稱爲MakeRequest的第一部分。

+0

這麼簡單,更有意義,因爲在需要重建uri的請求的生命期間參數可能會改變。謝謝。你有建議如何使'_Host'字符串在子類中是靜態的嗎? – forTruce 2013-02-10 03:40:24

+0

如果基地在其構造函數中使用主機,並且使基礎構造函數成爲內部函數,則只有派生類型才能創建基類。 – John 2013-02-10 04:35:22