我對這件事有我的想法,但似乎很多圖書館和產品讓第三方libs流血到API中。記錄就是一個很好的例子。幾乎所有的事情都暴露出您需要配置該日誌API,而不是使用您可以實現並提供給該lib的提供程序接口。何時將第三方庫作爲您的API的一部分公開?
旨在包裝和隱藏所有的庫問太多?這是否值得麻煩?
我對這件事有我的想法,但似乎很多圖書館和產品讓第三方libs流血到API中。記錄就是一個很好的例子。幾乎所有的事情都暴露出您需要配置該日誌API,而不是使用您可以實現並提供給該lib的提供程序接口。何時將第三方庫作爲您的API的一部分公開?
旨在包裝和隱藏所有的庫問太多?這是否值得麻煩?
我想很多都取決於你在做什麼。考慮到你正在談論的例子,我認爲如果你完全隱藏了第三方API,這將是一個令人難以置信的時間浪費,並且會給最終消費者一個不太健壯的軟件包。
例如,如果您正在使用Log4Net並隱藏所有配置方面,則僅將靈活性限制爲您整合/公開的項目。現在,另一方面,有時間和地點是你想要做的。
因此,我想只有真正的企業需要這樣做,它的長短。至少這是我的0.02美元。
包裝和隱藏有關圖書館的所有內容不僅不值得麻煩,它往往適得其反。
例如,我們有一個庫,它實現了一個名爲OAI-PMH的特定HTTP協議。該庫在Apache HttpClient 4.0之上實現,它有一組豐富的配置參數。我們只是將Apache library's configuration interface公開爲我們自己的工廠和構造函數,而不是組成我們自己的配置參數來包裝HttpClient。
如果我們試圖包裝所有的Apache參數,它將花費數月時間。如果我們代表我們的圖書館用戶決定哪些參數很重要,而且只包含這些參數,那麼我們就會限制他們可以對我們的圖書館做些什麼。
當重寫HttpClient時會發生什麼?包裝總是爲您提供將x翻譯成y的機會,這意味着您可能可以解決無需客戶介入的問題。 – 2010-07-08 04:46:21
僅僅因爲有一個HttpClient 5.x並不意味着HttpClient 4.x會突然停止工作。如果您與第三方圖書館提供商之間存在如此脆弱或好鬥的關係,您最好轉換提供商或自己編寫自己的圖書。應用於隨運行時提供的類庫時,上述「正當性」同樣適用。你是否也包裝你的java.lang.Strings? – 2010-07-08 12:49:03
難道他們不重寫HttpClient 4而不是3反向編譯嗎? 我們無法將像String這樣的值類型與像HttpClient這樣的服務進行比較,並且它是intfs。一個是一個值類型,它幾乎總是一個類,另一個隱藏在一個intf之後。 那麼當你需要升級HttpC時會發生什麼?當它像CLogging這樣的依賴關係阻礙時會發生什麼? – 2010-07-10 07:18:40
區別在於,更改配置是本地的 - 它隻影響少數文件。如果需要從o升級切換到不兼容的log4net,則一半的代碼庫立即出錯並被破壞。這發生在java世界瓦特/ log4j當一個主要類被棄用贊成或新的等價物。 – 2010-07-08 04:48:00