与第三方库分离

时间:2017-08-06 20:54:16

标签: java interface wrapper decouple

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

界面中的一个方法是:

Response get(String url);

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您是否考虑过抽取通过Http访问的存储库,而不是抽象http库?比如说,你有推文的其余终点:

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库而不引入耦合。