簡體   English   中英

從第三方庫解耦

[英]Decoupling from 3rd party library

我正在使用第三方HTTP客戶端進行GET,POST調用。 我不想將我的代碼綁定到該庫。 因此,我決定創建一個名為HttpClient的接口和一個名為HttpClientImpl的實現。

界面中的方法之一是:

Response get(String url);

從接口返回的Response對象是第三方庫中的對象。 因此,從技術上講,這不會使我的代碼與第三方庫脫鈎。

解耦自我的最佳方法是什么? 我應該創建自己的響應對象來包裝第三方庫的響應嗎?

這是介體設計模式的經典案例:使用HTTP客戶端的類既不應該暴露給HTTP客戶端實現(您已經封裝了),也不應該暴露給它的響應對象。

在這種情況下,在此處使用泛型將不會阻止using類知道響應類。

如您所建議-具有包裝響應類/從第3方響應轉換為您自己的響應方。

您是否考慮過抽象通過Http訪問的存儲庫,而不是抽象http庫? 舉例來說,您擁有Tweets的寧靜端點:

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類是TweetRepository該類可以創建,讀取,更新和刪除tweet。 此類的接口可能類似於以下內容:

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庫,而無需引入耦合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM