【问题标题】:Making Api Calls using Inheritance as a wrapper使用继承作为包装器进行 Api 调用
【发布时间】:2013-02-10 13:20:35
【问题描述】:

我正在尝试构建一个应用程序来处理对 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&lt;*subclassname*&gt;。由于泛型的属性,特定子类的每个对象都将共享一个静态的_Host

【问题讨论】:

  • 只需将您想要的特定主机传递给超类构造函数即可。
  • 我希望避免这种情况,因为我从基类派生每个单独的 Api 调用,并且觉得在我的其他代码中放置这些常量 Api 主机字符串会很奇怪。想法?
  • 我想你可能想要一个抽象基类。
  • @ColinPear 我认为您可能是对的。但是,我将如何在必须在子类中的抽象定义中实现静态主机字符串。没有 setter 的抽象属性会是最好的方法吗?
  • 将其设为静态的目的是什么?您的基类变量和方法将可用于从它继承的所有类。如果你想让它只读,你可以这样做。

标签: c# api inheritance


【解决方案1】:

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

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

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

【讨论】:

  • 如此简单且更有意义,因为参数可能会在需要重建 uri 的请求的生命周期内发生变化。谢谢。您对如何使_Host 字符串在子类中成为静态字符串有什么建议吗?
  • 如果基类在其构造函数中使用主机,并且您将基类构造函数设为内部,则只有派生类型才能创建基类。
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多