1

我正在使用第三方 HTTP 客户端进行 GET、POST 调用。我不想将我的代码绑定到这个库。所以我决定创建一个名为 HttpClient 的接口和一个名为 HttpClientImpl 的实现。

接口中的方法之一是:

Response get(String url);

从接口返回的 Response 对象是来自第三方库的对象。所以这在技术上不会将我的代码与第三方库分离。

解耦自己的最佳方法是什么?我应该创建自己的响应对象来包装第三方库的响应吗?

4

2 回答 2

1

这是 Mediator 设计模式的经典案例:使用 HTTP 客户端的类不应暴露给 HTTP 客户端实现(您已经封装)或其响应对象。

在这种情况下使用泛型不会阻止使用类知道响应类。

正如你所建议的 - 有一个包装响应类/有一个从第 3 方响应到你自己的响应的转换器。

于 2017-08-06T21:25:02.657 回答
1

您是否考虑过抽象您通过 Http 访问的存储库,而不是抽象 http 库?例如,你有 Tweets 的 restful 端点:

GET    https://someapi.com/Tweets
GET    https://someapi.com/Tweets/{id}
POST   https://someapi.com/Tweets
PUT    https://someapi.com/Tweets/{id}
DELETE https://someapi.com/Tweets/{id}

TweetRepository拥有一个可以创建、读取、更新和删除推文的类是有意义的。此类的接口可能类似于以下内容:

public interface TweetRepository {
    public List<Tweet> get();
    public int add(Tweet tweet);
    public void remove(int id);
    public Tweet get(int id);
    public void update(int id, Tweet tweet);
}

如果您的控制器使用该接口,那么您可以让您的实现使用您想要的任何 http 库,而无需引入耦合。

于 2017-08-06T21:32:37.583 回答