使用继承作为包装器进行Api调用

时间:2013-02-10 03:04:40

标签: c# api inheritance

我正在尝试构建一个应用程序来处理向2或3个相关API发出大量API请求。我的一般策略是让一个基类ApiRequest具有:

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呼叫的基础,我会全力以赴。我不确定我的方法是最好的。

感谢。

我的解决方案:

我实施了John和Colin Pear的想法。 我将基础ApiRequest更改为抽象类,然后将CombineUri()方法移到MakeRequest()方法中。

我还进一步将ApiRequest更改为通用类,并将_Host更改为static string。这样,每个子类都有子类ApiRequest<*subclassname*>。由于泛型的属性,特定子类的每个对象将共享静态_Host

1 个答案:

答案 0 :(得分:2)

如何将CombineUri()设为私有,然后在MakeRequest()的实现中调用它。

这个类的用户不必知道他们需要调用两个方法,而且他们必须在调用MakeRequest之前调用CombineUri。这是属于MakeRequest的实现细节。

我可能无法完全理解这些类,但如果我这样做,那么我会将CombineUri设为私有,并始终将其称为MakeRequest的第一部分。