我正在使用第三方HTTP客户端进行GET,POST调用。我不想将我的代码绑定到这个库。所以我决定创建一个名为HttpClient的接口及其实现,名为HttpClientImpl。
界面中的一个方法是:
Response get(String url);
从接口返回的Response对象是来自第三方库的对象。因此,从技术上讲,这不会将我的代码与第三方库分离。
解除自己的最佳方法是什么?我应该创建自己的响应对象来包装第三方库的响应吗?
答案 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库而不引入耦合。